我需要以下列方式十次分割一个非常大的文件(3GB):第一个分割在前10%的行和文件的其余部分之间分割,第二个分割在第二个10%之间分割线条和其余部分等(这是为了进行交叉验证)
我通过将文件的行加载到列表,遍历列表并通过其索引将每行写入正确的输出文件来天真地完成此操作。这需要很长时间,因为每次写入3GB数据。
有没有更好的方法呢?
注意:在每行的开头添加#
就像删除它一样。在开始时添加和删除#
到行的开头会更聪明吗?
示例:如果文件是[1,2,3,4,5,6,7,8,9,10],那么我想将它拆分为:
[1] and [2,3,4,5,6,7,8,9,10]
[2] and [1,3,4,5,6,7,8,9,10]
[3] and [1,2,4,5,6,7,8,9,10]
等等
答案 0 :(得分:1)
我建议尝试减少文件数量。尽管使用现代磁盘30 GB并不算太多,但仍然需要花费大量精力(和时间)来处理。
例如:
假设您想要10%的行,而不是10%的大小,您可以使用每行的开头创建一个索引文件,并通过索引访问(单个,原始)文本文件
您还可以将原始文件转换为固定记录文件,以便每个文本行占用相同的大小。然后,您可以使用seek()选择访问权限。
这些功能都可能被隐藏起来'通过在Python中定义类文件对象。通过这种方式,您可以将多个文件作为多个虚拟文件进行访问。文件,每个文件只显示您想要的部分(或部分)。