如何解决这个'ValueError:太多的值来解压'

时间:2015-06-28 22:51:09

标签: python

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

  

文件“goldfish.py”,第18行,文件名,text = 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

所以我的问题是:

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

3 个答案:

答案 0 :(得分:2)

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

  • <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> </script> <img src="http://lorempixel.com/50/50/nature" /> <img src="" />
  • 11534
  • "The Shift[…]for the World"
  • "I don’t get[…]Great Flash of "

我不知道你最好解决这个问题,因为这似乎是你数据的问题。

答案 1 :(得分:1)

如果捕获并可能丢弃/记录异常不是一个选项,请使用切片而不是解压缩来提取数据。

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

答案 2 :(得分:0)

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

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?
    #