将大型 HTML 表转换为 CSV

将大型 HTML 表转换为 CSV

我有一些数据(基本个人信息),需要从旧系统导出到新系统(MySQL DB)。这些数据大约有 200MB,分布在 6 个文件中。

我要导出的系统可以将所有所需数据导出为 Excel 文件。但是,创建 Excel 的方法是创建一个 HTML 表并使用扩展名保存.xls。在文本编辑器中查看时,它们看起来就是这样(除了 600,000 行长)。

<table>
<tr>

            <td class="tableh">
                <b>Birth&nbsp;Date</b>
            </td>

            <td class="tableh">
                <b>First&nbsp;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&nbsp;Date</b>
            </td>
            <td class="tableh">
                <b>First&nbsp;Name</b>
            </td>
</table>
</tr>

输出文件

Birth Date, First Name
  • 您可以选择不同的分隔符(逗号、分号、竖线、制表符)

当然,你必须问问自己,这些个人信息是否可以上传到在线服务。我不能告诉你。

答案3

抱歉,我没有代码可以分享,但也许最好的策略是删去流程中的 Excel 部分并直接转到逗号分隔的文本。

两个想法:

  1. 将 html 文件变成一个适当的 xml 文件(应该只需要几个标题标签和一个整体包装标签),制作一个 xslt 样式表(应该非常简单),然后通过 xslt 处理器运行 xml 文件,比如xsltproc

  2. 如果您使用的是 Linux / Unix,请考虑使用流编辑器编写脚本,以awk删除标签并输出字段。

无论哪种情况,逻辑都是这样的:

  • 如果遇到<th>,则输出换行符
  • 如果遇到一<td> </td>对,则输出用引号括起来的内容

SO 上有一个很棒的xslt论坛,值得在那里发布代码示例。

相关内容