【问题标题】:Python read file script errorPython读取文件脚本错误
【发布时间】:2011-07-31 11:07:37
【问题描述】:

这个 python 脚本有什么问题:

RoomNumber = input("Enter the room number:")

text_file = open('roombookings.txt', 'r')
for line in text_file:
    (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(";")
    if RoomNumder == (s['Room']):
        print("Date: " + s['Date'])
        print("Room: " + s['Room'])
        print("Course: " + s['Course'])
        print("Stage: " + s['Stage'])
        text_file.close()

input("\n\nPress enter key to exit.")

我正在尝试在输入房间号时将日期、课程和阶段作为输出,但出了点问题。当我在

运行脚本时

"(s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(";")"

我收到“值错误:需要超过 1 个值才能解压”。我不知道那是什么意思。

【问题讨论】:

  • 你不应该在第一次匹配后关闭你的文件,因为你最终会遇到 I/O 错误(for 循环将尝试读取关闭文件的下一行)。另请注意line 包含换行符作为最后一个字符,您可能希望line.rstrip() 将其关闭。

标签: iso-8859-1


【解决方案1】:
(s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(";")

我收到“值错误:需要超过 1 个值才能解压”我不知道 这是什么意思。

这意味着它试图找到四个值,分配给左边列出的四个键,但是line.split(";") 生成的数组只包含一个。有问题的行不能包含分号;它可能是空的。

【讨论】:

  • 吹毛求疵:如果它说它需要“超过 1 个值”,split 只返回 1 个子字符串(即未修改的行,因为根本没有分号)。可能是一个空行。
  • @delnan 哎呀,我把它误读为“多 1 个价值”。现在更正。
【解决方案2】:

unpack 相关的错误在 python 中很常见,它告诉你,不可能执行所有请求的分配,即

a,      = 1, 2  # ValueError: 'too many values to unpack'
a, b, c = 1,    # ValueError: 'need more than 1 value to unpack'
a, b, c = 1, 2  # ValueError: 'need more than 2 values to unpack'

正如 Jeremy Banks 所说,您的其中一行似乎不包含分号(因此没有执行拆分,并且您在赋值的右侧只有一个值)。您需要某种输入验证。

【讨论】:

  • 什么样的输入验证?
  • @tomasz - 什么样的输入验证?
  • 您的代码说该文件应该包含每行带有 3 个分号的行,但您的错误表明这不是真的。你要确保每一行都是正确的,或者至少忽略一些行。您确定文件中没有空行吗?
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多