ValueError: для распаковки нужно более 1 значения - PullRequest
0 голосов
/ 14 июля 2011

У меня есть код, предназначенный для удаления строки в большом текстовом файле. Когда я запускаю его, появляется сообщение об ошибке «ValueError: для распаковки нужно более 1 значения». Поэтому я изменил целое число для 0, 1 и 2 в этой строке:

    _, k = line.split('\t',1)

Если я введу 2, то появится сообщение «Слишком много значений для распаковки» Я попытался определить каждую переменную следующим образом:

    f = []
    _ = []
    k = []
    x = []
    i = 0

.. Это тоже не сработало.

Вот код:

    # Opens each file to read/modify
    infile='110331_HS1A_1_rtTA.result'
    outfile='2.txt'

    #import Regex
    import re

    with open (infile, mode='r', buffering=-1) as in_f, open (outfile, mode='w', buffering=-1) as out_f:
        f = (i for i in in_f if i.rstrip())
        for line in f:
            _, k = line.split('\t',1)
            x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k)
            if not x:
                continue
            out_f.write(' '.join(x[0]) + '\n')

Вот ошибка:

   Traceback (most recent call last):
     File "C:\DB\Stack Overflow\test5.py", line 11, in <module>
       _, k = line.split('\t',1)
   ValueError: need more than 1 value to unpack

Спасибо за тех, кто готов помочь / научить меня :)

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Вы попали в строку, которая не содержит \t, следовательно, результирующий список содержит только один элемент.

1 голос
/ 14 июля 2011

О, это код, который я написал на другом вопросе . Вы могли бы спросить там ...

Поскольку в файле, который вы дали, не было непустых строк без tab, я предположил, что проблем не будет.

Вы можете проверить, есть ли какой-либо символ табуляции в строке, изменив этот:

f = (i for i in in_f if i.rstrip())

до

f = (i for i in in_f if '\t' in i.rstrip())

Таким образом, вы удалите пустые строки, а также строки без '\t'. Чтобы увидеть строку вашего файла с этой проблемой, вы можете сделать (используя оригинальный код):

try:
    _, k = line.split('\t',1)
except:
    print(line)

Кстати, _ часто используется для вещей, которые нам безразличны в какой-то операции. Может иметь любое имя.

ATCGATTTCG....ATGC    1..100blablabla
       ^                     ^
 useless part (_)     important one (k)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...