Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据Python中的字母表重新排列行的顺序_Python - Fatal编程技术网

如何根据Python中的字母表重新排列行的顺序

如何根据Python中的字母表重新排列行的顺序,python,Python,我有一个非常大的txt文件(>1GB),它包含大约800万个项目,每个项目有三个单词,用一个空格“”分隔。示例如下所示: Antonym abbreviate elongate InstanceOf george_toma person AtLocation cruelty war NotCapableOf plant speak_to_human RelatedTo note single DerivedFrom translatorese ese Antonym baby elder Ant

我有一个非常大的txt文件(>1GB),它包含大约800万个项目,每个项目有三个单词,用一个空格“”分隔。示例如下所示:

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有什么简单的方法吗?非常感谢。

按单词的字母顺序排序与按行的字母顺序排序相同,因此:

with open('infile_name','r') as input_file:
    lines = input_file.readlines()
    lines.sort()
    output_file = open('outfile_name', 'w')
    output_file.writelines(lines)
对于如此大的文件,此代码可能需要一些时间

编辑以反映用户的观点:


按单词的字母顺序排序与按行的字母顺序排序相同,因此:

with open('infile_name','r') as input_file:
    lines = input_file.readlines()
    lines.sort()
    output_file = open('outfile_name', 'w')
    output_file.writelines(lines)
对于如此大的文件,此代码可能需要一些时间

编辑以反映用户的观点:


如果文件中有混合大小写,则另一种解决方案不起作用,因为它按照字符在内存中的表示顺序进行排序。这意味着您的大写字母将排在小写字母之前(在OP的例子中,似乎只有大写字母,所以这可能没问题,但我们不知道完整的数据集)

sorted()
有另一个参数key,可以更改比较每个字母的方法。因此,如果您将每个转换为大写,您将看到它不区分大小写:

In [6]: sorted(['a', 'B', 'b', 'A'], key=lambda s:s.upper())
Out[6]: ['a', 'A', 'B', 'b']

如果文件中有混合大小写,则另一种解决方案不起作用,因为它按照字符在内存中的表示顺序进行排序。这意味着您的大写字母将排在小写字母之前(在OP的例子中,似乎只有大写字母,所以这可能没问题,但我们不知道完整的数据集)

sorted()
有另一个参数key,可以更改比较每个字母的方法。因此,如果您将每个转换为大写,您将看到它不区分大小写:

In [6]: sorted(['a', 'B', 'b', 'A'], key=lambda s:s.upper())
Out[6]: ['a', 'A', 'B', 'b']