Python:将包含一列的多个文件复制到一个包含多列的文件中

时间:2013-08-29 07:55:49

标签: python-2.7

我在Python 2.7中有以下问题: 我有20个不同的txt文件,每个文件只有一列数字。现在 - 作为输出 - 我希望有一个文件包含所有这些列。如何在Python中连接单列文件?我正在考虑使用fileinput模块,但我担心,我必须立即打开所有不同的txt文件? 我的想法:

filenames = ['input1.txt','input2.txt',...,'input20.txt']
import fileinput

with open('/path/output.txt', 'w') as outfile:
    for line in fileinput.input(filenames)
        write(line)

对此有何建议? 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

非常简单(天真的?)解决方案

filenames = ['a.txt', 'b.txt', 'c.txt', 'd.txt']
columns = []
for filename in filenames:
    lines = []
    for line in open(filename):
        lines.append(line.strip('\n'))
    columns.append(lines)
rows = zip(*columns)
with open('output.txt', 'w') as outfile:
    for row in rows:
        outfile.write("\t".join(row))
        outfile.write("\n")

但是在* nix(包括OS X终端和Cygwin)上,它更容易

$ paste a.txt b.txt c.txt d.txt
从命令行

答案 1 :(得分:0)

我的建议:一个小功能的方法。使用列表解析将zip正在读取的文件,累积列,然后join再次成为一个字符串,一次一列(文件):

filenames = ['input1.txt','input2.txt','input20.txt']
outputfile = 'output.txt'
#maybe you need to separate each column:
separator = " "
separator_list = []
output_list = []
for f in filenames:
    with open(f,'r') as inputfile:
        if len(output_list) == 0:
            output_list = inputfile.readlines()
            separator_list = [ separator for x in range(0, len(outputlist))]
        else:
            input_list = inputfile.readlines()
            output_list = [ ''.join(x) for x in [list(y) for y in zip(output_list, separator_list, input_list)]
with open(outputfile,'w') as output:
    output.writelines(output_list)

它会在结果中保留累加器(output_list),并且一次保存一个文件(正在读取的文件,也是唯一可以读取的文件),但可能会慢一点,当然,它不是防止失败的。