我在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)
对此有何建议? 谢谢你的帮助!
答案 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
),并且一次保存一个文件(正在读取的文件,也是唯一可以读取的文件),但可能会慢一点,当然,它不是防止失败的。