Python:行拆分值错误?

时间:2012-10-17 19:57:05

标签: python

我使用的是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";
编辑:嗯。弄清楚了。感谢大家的帮助。

3 个答案:

答案 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: