Python 以列表形式读取列

Python 以列表形式读取列,python,delimited-text,tab-delimited,tab-delimited-text,Python,Delimited Text,Tab Delimited,Tab Delimited Text,我有一个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='';a

我有一个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
它表示“str”对象不支持项分配


有什么提示吗?

如果要将所有数据分配给每列的变量,请从以下列表开始:

per_row = []
for line in infile:
    per_row.append(line.strip().split('\t'))
然后将其转换为列列表:

per_column = zip(*per_row)
这是一个列表列表<代码>每列[0]是数据的第一列

但是,您确实希望使用来读取表格数据

不幸的是,您的代码与Python的工作距离还不够近。您将几个变量指定为空字符串,然后尝试将它们用作列表。

此处

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')

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

更正@Martijn Pieters答案

应该是这样的

per_row = []
for line in infile:
    per_row.append(line.split('\t'))
然后将其转换为列列表:

per_column = zip(*per_row)
这是一个列表列表<代码>每列[0]是数据的第一列


这就是我想要的结果
strip()
也会删除空白单元格。

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]))

正如Martijn Pieters所说,csv模块非常方便。只需确保内存不耗尽(即输入文件不应太大)。

您应该将条带保留在适当的位置,但使用方式要适合您的数据,以便正确删除换行符。考虑RRAB('\n),只删除行右侧的换行符。
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]