2013-08-29 57 views
1

我在Python 2.7中有以下問題: 我有20個不同的txt文件,每個文件都只有一列數字。現在 - 作爲輸出 - 我希望將所有這些列放在一起。我如何連接Python中的一列文件?我正在考慮使用fileinput模塊,但我擔心,我必須一次打開所有不同的txt文件? 我的想法:Python:將一列中的多個文件複製到多列中的一個文件中

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

我會按順序讀取文件,將列保存在列表中。從那裏,它應該合理簡單地輸出旁邊的列。 – Evert

+0

順便說一句,你究竟是指「所有這些列在一起」?作爲一個表彼此相鄰,或者只是一個接一個? – Evert

+0

您不能將文件作爲列一起追加。你所能做的就是讀取每一個文件,然後將它們打印成不同的列。 – Mehraban

回答

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 
從命令行

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),以及一次讀取一個文件(正在讀取的文件,這也是唯一可以讀取的文件),但可能會稍微慢一點,當然也不是防故障的。

相關問題