按每个列数排序csv

2024-05-16 04:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的(2.2GB)文本分隔的文件,它保存着当我想从化学品a转到化学品B时我搜索的化学路径。我想知道有没有人知道一种方法(最好是在python中),我可以根据一行中的列数对文件进行排序?在

示例:

CSV:

A B C D
E F G
H I
J K L M N

应排序为:

^{pr2}$

我一直在考虑制作一个行长度和行的哈希表,但随着csv文件越来越大:(我们运行的是化学网络上最长的路径,而2.2gb(30mil路径)只有length<;=10),我预计这种方法可能不是最快的。在


Tags: 文件csv方法文本路径网络示例排序
1条回答
网友
1楼 · 发布于 2024-05-16 04:35:46

我会根据长度将它们分成单独的文件,然后再将它们重新组合在一起—类似于:

from tempfile import TemporaryFile
from itertools import chain

保留文件长度的引用dict->;output file。如果文件已打开,则写入该文件,或创建新的临时文件。在

^{pr2}$

正如Steven Rumbalski所指出的,这也可以通过一个defaultdict来实现:

^{3}$

临时文件将全部指向文件的结尾。将它们重置到开头,以便在阅读时再次获得数据。。。在

for fh in output.values():
    fh.seek(0)

从每个文件中按长度递增的顺序获取行。。。并将它们全部写入最终输出文件。在

with open('output', 'w') as fout:
    fout.writelines(chain.from_iterable(v for k,v in sorted(output.iteritems())))

Python应该在程序退出时清理临时文件。。。在

相关问题 更多 >