我使用的是Python 2.7.3 btw
大家好,
我有点问题。问题是我在下面的星号线上遇到了麻烦。 (对不起,有点新的Python)
所以这是我目前的代码:
with open('parsedChr','w') as fout, open('heartLungClassU.gtf','r') as filein:
average = 0
difference = 0
position = ''
bp = 0
for line in filein:
**chrom,cuff,exon,start,end,dot,sign,dots,gene,tranid,exonid,rest = line.split('\t',11)**
## notice 12 variables here so I tried to unpack with value 11
##more code after
我一直收到这个错误:
Traceback (most recent call last):
File "parse.py", line 11, in <module>
chrom,cuff,exon,start,end,dot,sign,dots,gene,tranid,exonid,rest = line.split('\t',11)
ValueError: need more than 9 values to unpack
我不明白为什么 - 请注意,有12个变量我将这条线分成了。为什么python会抱怨需要超过9个值才能解压缩?我之前有代码,我必须分成6个变量,因此在line.split中使用了5个(5个切成6个,正如我所理解的那样),但我不明白为什么类似的逻辑在这里不起作用。
编辑:这是文件的一部分:
chr1 Cufflinks exon 14765607 14765689 . + . gene_id "XLOC_000018"; transcript_id "TCONS_00001260"; exon_number "1"; oId "CUFF.68.1"; class_code "u"; tss_id "TSS40";
chr1 Cufflinks exon 14766604 14767199 . + . gene_id "XLOC_000018"; transcript_id "TCONS_00001260"; exon_number "2"; oId "CUFF.68.1"; class_code "u"; tss_id "TSS40";
chr1 Cufflinks exon 21156530 21156632 . + . gene_id "XLOC_000028"; transcript_id "TCONS_00002433"; exon_number "1"; oId "CUFF.88.1"; class_code "u"; tss_id "TSS69";
编辑:嗯。弄清楚了。感谢大家的帮助。
答案 0 :(得分:4)
要查看错误的确切行号,请执行以下操作:
for i, line in enumerate(filein):
try:
chrom,cuff,exon,start,end,dot,sign,dots,gene,tranid,exonid,rest = line.split('\t',11)
except ValueError:
print "ValueError on line", i+1
print "line", repr(line)
raise
在评论中,您为文本文件提供了link。我找不到任何少于11个标签的行:
>>> for i, line in enumerate(urllib.urlopen('http://dl.dropbox.com/u/108419362/file.gtf')):
... if line.count('\t') < 11:
... print i+1, repr(line)
... break
...
>>>
仔细检查您是否真正打开了您认为正在打开的文件。
答案 1 :(得分:2)
这意味着您的行不包含足够的(在本例中至少为9个)制表符字符,以便split()
调用将使用拆分值填充所有变量。
以下代码将产生相同的错误:
s = 'a b'
x, y, z = s.split(' ') # the result is ('a', 'b') but we have 3 variables
# on the left side of the expression.
答案 2 :(得分:2)
这意味着该行只分为9个值:
示例:
>>> a,b,c='foo bar'.split()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
您可以添加if
条件来处理此问题:
if len(line.split('\t'))>=11: