按第一个字符对文档排序

时间:2014-11-25 14:07:24

标签: python

我将一些文件合并在一起,但我想要做的是根据第一个字符按字母顺序排序输出。我尝试了以下但这不起作用。

filenames = ['1.txt', '2.txt', '3.txt']
with open('output.txt', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
             for line in infile:
                 outfile.write(sorted(line))

这是output.txt,因为它代表:
NH4 ^:0.000; 1] 2 [3
H-:0.000; -1] 4 [5
CCL4:0.000; 0] 5 [3

所需的output.txt:
CCL4:0.000; 0] 5 [3
H-:0.000; -1] 4 [5
NH4 ^:0.000; 1] 2 [3

2 个答案:

答案 0 :(得分:1)

已更新

 from operator import itemgetter
    filenames = ['1.txt', '2.txt', '3.txt']
    with open('output.txt', 'w') as outfile:
        total_lines = []

        for fname in filenames:
            with open(fname) as infile:
                total_lines += map(lambda s: s.strip(' '), infile.readlines())

        for line in sorted(total_lines):
            outfile.write(line)

答案 1 :(得分:1)

更新以在排序前删除前导空格。

您的问题对解释有点开放,但假设您要对多个文件中的所有行进行排序,您只需使用fileinput.input()

import fileinput

filenames = ['1.txt', '2.txt', '3.txt']
with open('output.txt', 'w') as outfile:
    outfile.writelines(sorted(line.lstrip() for line in fileinput.input(filenames)))

或者,如果您想要不区分大小写的排序:

import fileinput
import string

filenames = ['1.txt', '2.txt', '3.txt']
with open('output.txt', 'w') as outfile:
    outfile.writelines(sorted((line.lstrip() for line in fileinput.input(filenames)), key=string.lower))