我有一个非常大的txt文件(> 1GB),它包含大约800万个项目,每个项目有三个单词用空格隔开" &#34 ;.示例如下所示:
Antonym abbreviate elongate
InstanceOf george_toma person
AtLocation cruelty war
NotCapableOf plant speak_to_human
RelatedTo note single
DerivedFrom translatorese ese
Antonym baby elder
Antonym able cane
我想要获得的是一个文件,它根据第一个单词的字母 - 第二个单词 - 第三个单词重新排列所有项目。结果应该是:
Antonym abbreviate elongate
Antonym able cane
Antonym baby elder
AtLocation cruelty war
DerivedFrom translatorese ese
InstanceOf george_toma person
NotCapableOf plant speak_to_human
RelatedTo note single
使用Python有没有简单的方法?非常感谢。
答案 0 :(得分:2)
如果您的文件中包含混合大小写,则其他解决方案不起作用,因为它按字符在内存中表示的顺序排序。这意味着你的资本将出现在你的小案例之前(在OP的情况下,似乎只有大写,所以它可能没问题,但我们不知道完整的数据集)。
实施例
In [2]: sorted(['a', 'b', 'B', 'A'])
Out[2]: ['A', 'B', 'a', 'b']
sorted()
有另一个param,key,它允许您更改每个字母的比较方法。因此,如果您将每个转换为大写,您将看到它的排序不区分大小写:
In [6]: sorted(['a', 'B', 'b', 'A'], key=lambda s:s.upper())
Out[6]: ['a', 'A', 'B', 'b']
答案 1 :(得分:1)
按字母顺序按字母排序与按行按字母顺序排序相同,所以:
with open('infile_name','r') as input_file:
lines = input_file.readlines()
lines.sort()
output_file = open('outfile_name', 'w')
output_file.writelines(lines)
此代码可能需要一段时间才能显示这么大的文件。
编辑以反映limasxgoesto0的要点:
with open('infile_name','r') as input_file:
lines = input_file.readlines()
sorted_lines = sorted(lines, key=lambda s: s.upper())
output_file = open('outfile_name', 'w')
output_file.writelines(sorted_lines)