2013-09-16 51 views
1

我試圖讀取3個文本文件,並將它們合併爲一個輸出文件。迄今爲止這麼好,唯一的問題是我需要爲每個我讀的文件創建列。現在我從單個列中的文件中提取所有提取的數據。Python:我如何爲每個讀取的文件獲取新列?

#!/usr/bin/env python 

    import sys 
    usage = 'Usage: %s infile' % sys.argv[0] 

    i=3 #start position 
    outfile = open('outfil.txt','w') 

    while i<len(sys.argv): 
     try: 
      infilename = sys.argv[i] 
     ifile = open(infilename, 'r') 

     outfile.write(infilename+'\n') 
     for line in ifile: 
      outfile.write(line) 
      print line 
     except: 
      print usage; sys.exit[i] 

     i+=1; 

現在我的輸出文件看起來像這樣:

test1.txt 
a 
b 
c 
d 
test2.txt 
e 
f 
g 
h 
test3.txt 
i 
j 
k 
l 
+0

您需要同時讀取每個文件一行,而不是一次一個文件。然後使用'csv'模塊將數據放在一起。 (你的縮進也搞亂了;你可能想重新粘貼你的代碼,然後突出顯示它並點擊'{}'按鈕。 – geoffspear

回答

1

打開輸入文件一個又一個,收集數據到列表清單。然後,zip()通過csv作家的數據和作家用空格作爲分隔符:

#!/usr/bin/env python 
import csv 
import sys 

usage = 'Usage: %s infile' % sys.argv[0] 

data = [] 
for filename in sys.argv[1:]: 
    with open(filename) as f: 
     data.append([line.strip() for line in f]) 

data = zip(*data) 
with open('outfil.txt', 'w') as f: 
    writer = csv.writer(f, delimiter=" ") 
    writer.writerows(data) 

假設你有:

  • 1.txt具有以下內容:

    1 
    2 
    3 
    4 
    5 
    
  • 2.txt與以下內容:

    6 
    7 
    8 
    9 
    10 
    

然後,如果你的代碼保存到test.py並運行它作爲python test.py 1.txt 2.txt,在outfil.txt您將獲得:

1 6 
2 7 
3 8 
4 9 
5 10 
+0

thaaaaaanx,我試過用\ t但是它沒有幫助 – user2784877

1
$ cat a 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

$ cat b 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 


>>> import itertools 
>>> for (i,j) in itertools.izip(open('a'), open('b')): 
...  print i.strip(), '---', j.strip() 
... 
1 --- 51 
2 --- 52 
3 --- 53 
4 --- 54 
5 --- 55 
6 --- 56 
7 --- 57 
8 --- 58 
9 --- 59 
10 --- 60 


>>> 
+0

+1使用izip代替一次將所有文件加載到內存中。 –

相關問題