Tengo un archivo con preguntas y respuestas en la misma línea, quiero separar de ellos y añadirlos a su propia lista vacía pero seguir recibiendo este error:
builtins.ValueError: need more than 1 value to unpack

questions_list = []
answers_list = []

questions_file=open('qanda.txt','r')


for line in questions_file:
    line=line.strip()

    questions,answers =line.split(':')

    questions_list.append(questions)
    answers_list.append(answers)

OriginalEl autor user3046660 | 2013-11-28

3 Comentarios

  1. 3

    Esto es probablemente porque cuando estás haciendo la división, no hay :, por lo que la función devuelve un argumento, y no 2. Esto es probablemente causado por la última línea, lo que significa que eres el último de la línea no tiene nada, pero los espacios vacíos. Así:

    >>> a = '   '
    >>> a = a.strip()
    >>> a
    ''
    >>> a.split(':')
    ['']

    Como se puede ver, la lista que se devuelve desde .split es solo una cadena vacía. Así, solo para mostrar una demo, este es un archivo de ejemplo:

    ValueError: se necesita un valor de más de 1 a desempacar, dividir una línea

    Tratamos de utilizar la siguiente secuencia de comandos (val.txt es el nombre de el archivo de arriba):

    with open('val.txt', 'r') as v:
        for line in v:
            a, b = line.split(':')
            print a, b

    Y esto nos da:

    Traceback (most recent call last):
    a  b
    
    c  d
      File "C:/Nafiul Stuff/Python/testingZone/28_11_13/val.py", line 3, in <module>
    
        a, b = line.split(':')
    e  f
    ValueError: need more than 1 value to unpack

    Cuando tratando de ver esto a través de un depurador, la variable line se convierte en \n, y no se puede dividir.

    Sin embargo, un simple lógica enmienda, podría corregir este problema:

    with open('val.txt', 'r') as v:
        for line in v:
            if ':' in line:
                a, b = line.strip().split(':')
                print a, b
    gracias por las respuestas..mi primera línea del archivo es la siguiente ¿qué comando muestra la cantidad de memoria disponible:libre …voy a probar el código anterior pronto y ver lo que sucede, gracias
    gran trabajo ahora..gracias por los consejos
    Si esta respuesta ayudado a usted, por favor siéntase libre de upvote, y si que respondió a su pregunta, por favor, acepte haciendo clic en el tickmark en el lado izquierdo de esta pregunta.

    OriginalEl autor Games Brainiac

  2. 3

    line.split(':') aparentemente devuelve una lista con un solo elemento, no dos.

    Por lo tanto es por eso que no se puede descomprimir el resultado en questions y answers. Ejemplo:

    >>> line = 'this-line-does-not-contain-a-colon'
    >>> question, answers = line.split(':')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: need more than 1 value to unpack

    OriginalEl autor Simeon Visser

  3. 2

    Tratar:

    question, answers = line.split(':', maxsplit=1)
    question, __, answers = line.partition(':')

    También en Python 3 usted puede hacer algo más:

    question, *many_answers = line.split(':')

    que se parece a:

    temp = line.split(':')
    question = temp[0]
    many_answers = tuple(temp[1:])

    OriginalEl autor Kos

Dejar respuesta

Please enter your comment!
Please enter your name here