将列读取为列表

4 投票
5 回答
19565 浏览
提问于 2025-04-17 20:03

我有一个文本文件,里面的数据是用制表符分隔的。

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'对象不支持项赋值。

有什么建议吗?

5 个回答

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

所以,你可以用字符串列表来代替字符串。

6

如果你想把每一列的数据都放到变量里,首先要从一个列表开始:

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

然后再把这个列表变成一个包含每一列的列表:

per_column = zip(*per_row)

现在这就是一个列表的列表;per_column[0] 就是第一列的数据。

不过,其实你应该使用 csv 模块 来读取表格数据,这样更方便。

可惜的是,你的代码离能正常工作的 Python 还差得远呢。你把几个变量都赋值为空字符串,然后又试图把它们当成列表来用。

2

对@Martijn Pieters的回答做个更正

应该是这样写的

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

然后再把它变成一列一列的数据:

per_column = zip(*per_row)

现在这就是一个列表的列表;per_column[0] 是第一列的数据。

这样就得到了我想要的结果。strip() 还可以去掉空白单元格。

撰写回答