2013-03-23 40 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模块是非常方便。只要确保你没有用完内存(即输入文件不应该太大)。