【问题标题】:How to correct ValueError: not enough values to unpack (expected 2, got 1) [duplicate]如何更正 ValueError:没有足够的值来解包(预期 2,得到 1)[重复]
【发布时间】:2020-07-18 01:28:34
【问题描述】:

当我尝试打印时

import collections 
sentences = collections.defaultdict(list)
unique_suffixes = set()
with open ('file.txt', 'r') as s:
    for line in s:
        start, end = line.split(' ', maxsplit=1)

我抛出“ValueError: no enough values to unpack (expected 2, got 1)”。基于代码的最后一行。

我发现了几个问题,虽然他们有很好的信息,但在这种情况下它们对我有帮助

【问题讨论】:

  • 您的文件似乎包含没有空格的行(可能只有一个单词..等)

标签: python python-3.x dictionary


【解决方案1】:

这是因为您的最后一行产生了一个包含两个元素的列表。

所以以下必须解决您的问题:

import collections 
sentences = collections.defaultdict(list)
unique_suffixes = set()
with open ('input.txt', 'r') as s:
    for line in s:
        data = line.split(' ', maxsplit=1)
        start = data[0]
        end = data[1]

【讨论】:

  • 在这种情况下,我的索引超出范围
  • 您确定您的文件使用 ' ' 作为分隔符吗?还尝试使用 print(data) 打印倒数第三行。这可能有助于您了解所创建列表的元素。
  • 是的,我确定。它在linux中不起作用。不要知道它是如何工作的或它是如何工作的
  • 你能把你的 file.txt 显示几行吗?
  • 我更新了问题。它在其他来源中工作,但我正在尝试在 Liniux 中。
【解决方案2】:

试试这个:如果行没有空格,它将使用与开头和结尾相同的单词。

import collections 
sentences = collections.defaultdict(list)
unique_suffixes = set()
my_list = []
with open ('file.txt', 'r') as s:
    for line in s:
        data = line.split(' ', maxsplit=1)
        start = data[0]
        end = data[-1]
        my_list.append((start, end))

-1 在 python 中的索引意味着以列表的相反顺序取第一个元素。

将其写入 csv 文件:

import csv
with open('outfile.csv','w') as f:
    out = csv.writer(f)
    out.writerow(['titleA', 'titleB'])
    out.writerows(my_list)

【讨论】:

  • 我们如何将结果存储在文本文件中
  • 你想如何保存它?作为普通文件还是 csv?
  • 我想保存为 .csv 格式
  • 这会通过混淆输入数据来避免错误。这有什么帮助?
  • 问题是可能有一行或多行没有空格。这将需要人工检查。此外,如果发生这种情况,用户还没有定义他想要什么。所以这个问题的简单解决方案就是这样。我希望你同意我的看法。否则,还有另一种方法可以跳过该特定元素。或被另一个字符分割。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2020-09-28
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多