2013-03-23 37 views
4

我在窗體中的txt文件中有數據。製表符分隔的數據將列讀取爲列表

here 
    a b c 
    e f g 
tere 
    x y z 
    w t y 

我需要將列讀入列表。像

col1 = ['here', '', '', tere, '', ''] 
col2= ['', 'a', 'e', '', 'x'.'w'] 

等等。

我用

import re 

infile = open('text.txt', 'r') 
i=0 
a0='';a1='';a2='';a3='';a4='';a5='';a6='';a7=''; 
for line in infile: 
    [a1[i],a2[i],a3[i],a4[i],a5[i],a6[i],a7[i],a8[i]] = line.split('\t') 
    i+=1 

它說,「海峽」對象不支持的項目分配。

任何提示?

回答

2

更正@Martijn Pieters的答案

本來應該是這樣的

per_row = [] 
for line in infile: 
    per_row.append(line.split('\t')) 

才把把它轉換成列的列表:

per_column = zip(*per_row) 

現在這是一個列表清單; per_column[0]是第一列數據。

這給出我想要的結果。 strip()也刪除空白單元格。

+0

你應該保持適當的位置,但要以適合你的數據的方式使用它,以便正確地刪除換行符。考慮.rstrip('\ n')只能刪除該行右側的換行符。 – sage88

6

如果你想分配給變量的所有數據列,開始與列表:

per_row = [] 
for line in infile: 
    per_row.append(line.strip().split('\t')) 

,然後纔將其轉換成的列表:

per_column = zip(*per_row) 

這是一個列表清單; per_column[0]是第一列數據。

儘管您確實想使用csv module來讀取表格數據。

不幸的是,你的代碼不夠接近Python的工作。您爲空字符串分配了幾個變量,然後嘗試將它們用作列表。

0

這裏,

a0='';a1='';a2='';a3='';a4='';a5='';a6='';a7=''; 

,一旦你已經聲明的變量爲空字符串,則不能單獨(字符一個字符),因爲它們是不可變的字符串更改字符串。

[a1[i],a2[i],a3[i],a4[i],a5[i],a6[i],a7[i],a8[i]] = line.split('\t') 

因此,您可以使用字符串列表而不是字符串。

0

csv模塊往往也處理製表符分隔文件的最好方法:

from __future__ import print_function 

import csv 

MAXCOLS = 4 
cols = [[] for _ in xrange(MAXCOLS)] 
with open('text.txt', 'rb') as input: 
    for row in csv.reader(input, delimiter='\t'): 
     for i in xrange(MAXCOLS): 
      cols[i].append(row[i] if i < len(row) else '') 

for i in xrange(MAXCOLS): 
    print('cols[{}]: {}'.format(i, cols[i])) 

輸出:

cols[0]: ['here', '', '', 'tere', '', ''] 
cols[1]: ['', 'a', 'e', '', 'x', 'w'] 
cols[2]: ['', 'b', 'f', '', 'y', 't'] 
cols[3]: ['', 'c', 'g', '', 'z', 'y'] 
0
import csv 

## open file 
infile = open('col2Rows.txt', 'r') 

## define csv reader object, assuming delimiter is tab 
tsvfile = csv.reader(infile, delimiter='\t') 

lines = [] 

## iterate through lines in file 
for line in tsvfile: 
    lines.append(line) 

print "Col1",[line[0] for line in lines] 

喜歡的Martijn皮特斯說,csv模塊是非常方便。只要確保你沒有用完內存(即輸入文件不應該太大)。