![将大型 HTML 表转换为 CSV](https://linux22.com/image/1369986/%E5%B0%86%E5%A4%A7%E5%9E%8B%20HTML%20%E8%A1%A8%E8%BD%AC%E6%8D%A2%E4%B8%BA%20CSV.png)
我有一些数据(基本个人信息),需要从旧系统导出到新系统(MySQL DB)。这些数据大约有 200MB,分布在 6 个文件中。
我要导出的系统可以将所有所需数据导出为 Excel 文件。但是,创建 Excel 的方法是创建一个 HTML 表并使用扩展名保存.xls
。在文本编辑器中查看时,它们看起来就是这样(除了 600,000 行长)。
<table>
<tr>
<td class="tableh">
<b>Birth Date</b>
</td>
<td class="tableh">
<b>First Name</b>
</td>
令我惊讶的是,Excel 居然可以打开这样的文档。不幸的是,打开每个文件大约需要半个小时,将其保存为正确格式也需要差不多半个小时。
有人对这些转换有什么建议吗(比 Excel 所需的 45-60 分钟更快)?
答案1
这只是一张表格吗?你确定你的系统不能导出为 csv 吗?(它可以导出到 Excel 或 html,但不能导出为 csv,这似乎很不寻常。)
我很想再次拆分文件,然后稍后重新组装。我会尝试首先替换不需要正则表达式的文本(在 ST 或其他编辑器中)。正则表达式替换可能比标准替换慢得多。我会尽可能多地使用标准替换,甚至只是为了减少需要进行的正则表达式替换次数而使用它。我会做一些实验来计算整个过程可能需要多长时间。
或者,我可能会尝试将文件转换为 XML 格式,在开头添加标签,然后再次进行一些替换。然后完全跳过 Excel,我在 MySQL 中找到了以下内容:
LOAD XML LOCAL INFILE '/pathtofile/file.xml'
INTO TABLE my_tablename(personal_number, firstname, ...);
导入 XML。“LOAD XML INFILE 从 MySQL 5.2 开始可用”
您可以等待看看是否有其他人可以做出贡献。祝您好运。
答案2
非 Excel 解决方案是否也适用?如果适用,您的上传和下载速度有多快?
这在线服务在我的快速测试中表现不错。
根据您的互联网连接,它可能比 Excel 更快。
输入文件
<table>
<tr>
<td class="tableh">
<b>Birth Date</b>
</td>
<td class="tableh">
<b>First Name</b>
</td>
</table>
</tr>
输出文件
Birth Date, First Name
- 您可以选择不同的分隔符(逗号、分号、竖线、制表符)
当然,你必须问问自己,这些个人信息是否可以上传到在线服务。我不能告诉你。
答案3
抱歉,我没有代码可以分享,但也许最好的策略是删去流程中的 Excel 部分并直接转到逗号分隔的文本。
两个想法:
将 html 文件变成一个适当的 xml 文件(应该只需要几个标题标签和一个整体包装标签),制作一个 xslt 样式表(应该非常简单),然后通过 xslt 处理器运行 xml 文件,比如
xsltproc
。如果您使用的是 Linux / Unix,请考虑使用流编辑器编写脚本,以
awk
删除标签并输出字段。
无论哪种情况,逻辑都是这样的:
- 如果遇到
<th>
,则输出换行符 - 如果遇到一
<td> </td>
对,则输出用引号括起来的内容
SO 上有一个很棒的xslt
论坛,值得在那里发布代码示例。