【问题标题】:Error return "need more than 1 value to unpack"错误返回“需要超过 1 个值才能解压”
【发布时间】:2018-03-09 19:27:06
【问题描述】:

我正在尝试获取带有日期的文本文件并重新格式化它们。例如:'1/31/2017' 变为 '2017-1-31T:00:00:00Z'

代码:

with open("test.rtf") as f:
    data = f.readlines()

for line in data:
    a,b,c = line.split("/")

    if len(a) < 2:
        a = "0" + a

    if len(b) <2:
        b = "0" + b

    print(c,"-",a,"-",b,"T:00:00:Z")

但是,它返回一个错误: 回溯(最近一次通话最后): 文件“pubdateformat.py”,第 8 行,在 a,b,c = line.split("/") ValueError: 需要超过 1 个值才能解压

谁能解释一下这是什么意思?

感谢您的帮助!

【问题讨论】:

  • 确实 line.split("/") 似乎返回了一个只有 2 项的列表。不过,对于它的价值,我建议您查看datetime 库来为您执行此操作,而不是手动转换字符串。特别要注意strftimestrptime
  • 您的 data 似乎包含没有 "/" 的行,因此 split 将只返回该行。

标签: python


【解决方案1】:

您正在阅读 .rtf 文件,就好像它是 .txt 文件一样。 RTF 是 Microsoft 产品(例如 Word 和 Office)使用的一种文本文件格式。

如果您使用文本文件尝试相同的示例,它应该可以正常工作。获取一个库来读取 .rtf 文件或使用文本文件,相同的代码应该可以工作。

In [17]: with open("test.txt") as f:
    ...:     data = f.readlines()
    ...:
    ...: for line in data:
    ...:     a,b,c = line.split("/")
    ...:
    ...:     if len(a) < 2:
    ...:         a = "0" + a
    ...:
    ...:     if len(b) <2:
    ...:         b = "0" + b
    ...:
    ...:     print(c,"-",a,"-",b,"T:00:00:Z")
    ...:

OUTPUT  ('2017', '-', '01', '-', '31', 'T:00:00:Z')

【讨论】:

    【解决方案2】:

    你的错误指向这个。

    您的变量“数据”至少有一个值没有您期望的日期格式。这就是为 a、b 和 c 赋值的原因。请检查您的可变数据。您可以通过在 for 循环中添加一行来做到这一点,最好是在 for 循环的开头

    print(line)  ## This is by python3
    

    如果它不能解决您的问题,请发布您正在阅读的示例文件。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2013-04-04
      • 2011-02-18
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多