将所有.txt文件合并到一个文本文件中,并将该文本文件标记为字母

时间:2013-06-08 00:37:26

标签: php python sorting file-io python-2.7

我在目录中有两个文件,它们都是.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);
?>

1 个答案:

答案 0 :(得分: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)

如果您的文件很大,则需要单独对文件进行排序,写出已排序的结果,然后使用{{排序的文件合并到新的输出文件中。 3}}

您似乎正在使用Windows文件,这些文件使用\r\n(回车加换行)行结尾;您可以使用merge generator function并使用'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模式字符的详细信息,请参阅universal lineending support

要删除任何重复项,您需要创建一个集而不是列表,然后使用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))