从文件中解包值读取并分配给列表



在以下短程序中:

data = []
f = open('C:/tsg3.txt', 'r').read().split("t")
for i in range(0, len(f)-1):
   [GeneID, Sym, Alias, Xref, Chromo, Cyto, Full_name, Gene_type, Desc, Nuc_seq, Pro_seq = f[i]

我看到一个ValueError的出现(需要4个以上的值来解包)。显然,我做错了什么,因为我对Python还比较陌生。

如有任何帮助,我们将不胜感激。我使用的是Python 3.3.2。

谢谢。

通过制表符分割整个文件,得到一个字符串列表。

然后在该列表上循环,将f[i](单个字符串)分配给一长串变量。在错误消息中,您试图为这些变量分配一个4个字符的字符串,导致分配单个字符,但由于字符数与变量数不匹配而失败。

最有可能的情况是,您想要处理一个制表符分隔的文件。使用csv模块执行以下任务:

import csv
with open('C:/tsg3.txt', 'rb') as f:
    reader = csv.reader(f, delimiter='t')
    for row in reader:
        # `row` is a list of columns.

因为文件有标题,所以您也可以使用csv.DictReader并使用字典(用标题键控):

with open('C:/tsg3.txt', 'rb') as f:
    reader = csv.DictReader(f, delimiter='t')
    for row in reader:
        # `row` is a dictionary of columns.

并非所有行都具有所有值;有些似乎缺少核苷酸序列和蛋白质序列列。

为了将来参考,您可以直接在python列表上循环,不需要使用带有range():的索引

for i in f:
    # do something with the individual elements of `f`, assigned to `i` each iteration.

最新更新