我得到了一个大文本文件(10GB,.xml,包含超过 100 万个这样的标签: <record>
文本</record>
),我将其分成几个部分来使用它。但是为了能够自动化我的工作流程,每个部分都必须以特定标签结尾:</record>
. 并且每个部分至少有40MB左右的大小也是必要的。
我得到了一个大文本文件(10GB,.xml,包含超过 100 万个这样的标签: <record>
文本</record>
),我将其分成几个部分来使用它。但是为了能够自动化我的工作流程,每个部分都必须以特定标签结尾:</record>
. 并且每个部分至少有40MB左右的大小也是必要的。
下面的脚本将一个(大)文件切成片。我没有使用该
split
命令,因为您的文件的内容必须按记录“四舍五入”。您可以在脚本的头部部分设置切片的大小。步骤
难点
因为脚本要能处理大文件,python的
read()
还是readlines()
不能用;该脚本会尝试一次将整个文件加载到内存中,这肯定会阻塞您的系统。同时,必须进行划分,用整个记录“舍入”部分。因此,脚本应该能够以某种方式识别或“读取”文件的内容。似乎唯一的选择是使用:
它逐行读取文件。
方法
在脚本中我选择了两步法:
将行一个一个地附加到单独的切片(文件)的过程似乎效率低下,但从我尝试的所有结果来看,它被证明是最有效、最快和最少消耗的选项。
我是如何测试
的 我创建了
xml
一个 10GB 多一点的文件,里面充满了像你的例子这样的记录。我将切片的大小设置为45mb
. 在我不太新的系统(奔腾双核 CPU E6700 @ 3.20GHz × 2)上,脚本的分析产生了以下结果:然后它开始创建 45 MB 的切片,大约需要。每片创建 25-27 秒。
等等...
在此过程中,处理器占用了 45-50%,使用了大约 850-880mb 的内存(4GB)。在此过程中,计算机可以正常使用。
整个过程耗时一个半小时。在更新的系统上,它应该花费更少的时间。
剧本
如何使用
将脚本复制到一个空文件中,设置“大文件”的路径、保存切片的目录路径和切片大小。另存为
slice.py
并通过命令运行:笔记