如何在Python中基于字母表重新排列行的顺序

时间:2016-04-11 02:40:04

标签: python

我有一个非常大的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有没有简单的方法?非常感谢。

2 个答案:

答案 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)