1

我在 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)

对此有什么建议吗?谢谢你的帮助 !

4

2 回答 2

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

从命令行。

于 2013-08-29T08:39:44.910 回答
0

我的建议:一些功能性的方法。使用列表推导将正在读取的文件压缩到累积的列中,然后它们再次连接为字符串,一次一列(文件):

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(不是万无一失的。

于 2013-08-29T08:43:15.847 回答