【问题标题】:How to fix this 'ValueError: too many values to unpack'如何解决此“ValueError:要解包的值太多”
【发布时间】:2015-06-28 22:51:08
【问题描述】:

我正在尝试将具有 500k 行的大型 .tsv 文件解析为每行的单个 .txt 文件。 我的脚本现在能够迭代到 id 11533,然后停止并打印出以下错误:

文件“goldfish.py”,第 18 行,在文件名中,文本 = prev_row

ValueError:解包的值太多

我的脚本是这样的:

import csv
import sys

csv.field_size_limit(sys.maxsize)

with open('id_descr.tsv', 'rb') as f:
reader     = csv.reader(f, delimiter='\t')
fieldnames = next(reader)

prev_row = next(reader)

for row in reader:
    if not row:
        continue
    if len(row) == 1 or not row[0].isdigit():
        prev_row[-1] += row[0]
    else:
        filename, text = prev_row
        filename = filename + ".txt"
        with open(filename, 'wb') as output:
            output.write(text)
            output.write('\n')
            prev_row = row

以下 .tsv 文件包含最后迭代的行 (id=11533) 和未解析的以下行(即脚本停止的点)https://www.dropbox.com/s/8mizthp8n0kduax/sample.tsv?dl=0

所以我的问题是:

有没有办法忽略这种错误, 或者我该如何更改脚本以避免此错误?

【问题讨论】:

  • 使用try...except 块。通过异常跳过违规行。

标签: python


【解决方案1】:

输入文件的第 3 行包含三个制表符,分隔四个字段:

  • 11534
  • "The Shift[…]for the World"
  • "I don’t get[…]Great Flash of "
  • "2012. I was[…]free with lyrics "

我不知道你会如何最好地解决它,因为这似乎是你的数据有问题。

【讨论】:

    【解决方案2】:

    如果无法捕获并可能丢弃/记录异常,请使用切片提取数据而不是解包。

        else:
            filename = prev_row[0]
            text = '\t'.join(prev_row[1:])
    

    【讨论】:

      【解决方案3】:

      我不确定我是否完全理解了你的问题。为什么你不能做这样的事情?

      import csv
      import sys
      
      with open('sample.tsv', 'rb') as f:
          reader = csv.reader(f, delimiter='\t')
          fieldnames = next(reader)
      
          orig_stdout = sys.stdout
          stuff = []
          rowNUM = 0
          for row in reader:
              if len(row)==0 #some checking
                  pass
              #
      
              sys.stdout = open('file'+str(rowNUM), 'w') #direct output here
              print row # print to file specified above
      
              stuff = stuff + row # make an ongoing list?
          #
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多