从读取的文件中解压缩值并分配给列表

时间:2013-07-04 08:31:16

标签: python python-3.x

在以下简短程序中:

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。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以按标签拆分整个文件,从而生成一个字符串列表。

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

最有可能的是,您希望处理制表符分隔的文件。使用csv module执行此类任务:

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.

并非所有行都包含所有值;有些似乎缺少Nucleotide_Sequence和Protein_Sequence列。

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

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