0

我在一个目录中有两个文件,它们都是 .txt 文件,每行一个单词,多行。我需要将它们合并,然后按字母顺序排列新文件。

我已经在 PHP 中完成了这项工作,但是如何在 Python 2.7 中完成呢?

<?php
$files = glob("./files/*.??");
$out = fopen("listTogether.txt", "w");
foreach($files as $file){
    fwrite($out, file_get_contents($file));
}
fclose($out);
?>
4

1 回答 1

6

将所有输入文件读入一个列表,对结果进行排序并再次写出这些行:

from itertools import chain
from glob import glob

lines = list(chain.from_iterable(open(f, 'r') for f in glob('./files/*.??')))
lines.sort()

with open('listTogether.txt', 'w') as out:
    out.writelines(lines)

但是,如果您的文件很大,您希望单独对文件进行排序,写出排序结果,然后使用合并生成器函数将排序后的文件逐行合并到新的输出文件中。

您似乎正在使用 Windows 文件,这些文件使用\r\n(回车加换行)换行符;您可以使用通用 lineending 支持并使用 mode 打开文件'rU'以始终为您提供\n行尾:

lines = list(chain.from_iterable(open(f, 'rU') for f in glob('./files/*.??')))
lines.sort()

with open('listTogether.txt', 'w') as out:
    out.writelines(lines)

有关U模式字符的更多详细信息,请参阅open()函数调用

要删除任何重复项,您将创建一个集合而不是列表,然后使用sorted()它再次写出一个排序序列:

lines = set(chain.from_iterable(open(f, 'rU') for f in glob('./files/*.??')))

with open('listTogether.txt', 'w') as out:
    out.writelines(sorted(lines))
于 2013-06-08T00:40:04.090 回答