【问题标题】:Python: Converting a list element from readline() to integer?Python:将列表元素从 readline() 转换为整数?
【发布时间】:2014-12-23 08:19:56
【问题描述】:

所以我试图从包含十六进制数字的文本文件中读取一行,然后将其转换为十进制数字,然后将其除以 3。

但是我收到一条错误消息:“ValueError: invalid literal for int() with base 16:”

这是我所做的:

f = open('simp.txt','r')
line = f.readline()

while line:
    line = f.readline()
    temp = (int(str(line[3:11]),16))//3
    print(temp)

谁能告诉我我的代码有什么问题?谢谢!

编辑:这是我的 simp.txt 中的内容:

   00000000
   000032C8

所以程序应该打印:“4333”,因为 13000//3=4333。

【问题讨论】:

  • 我的猜测是某些行,数据不是 int; simp.txt 中有什么?
  • 错误是您可能正在尝试将字符转换为整数。请注意,readline 不会从字符串中删除 '\r' 或 '\n' 字符
  • 请给我们一些示例输入和预期输出

标签: python list file file-io integer


【解决方案1】:

这是因为当您使用 readline 时,它​​不会从字符串中删除 \n\r 字符,因此您最终会尝试将其转换为整数

使用f.readline().strip()

更好的方法是:

with open('simp.txt', 'r') as f:
    for line in f:
        temp = int(line.strip(), 16) // 3
        print(temp)

【讨论】:

  • strip() 的另一个好处是从字符串中删除所有前导和尾随空格。 看起来“simp.txt”中的行有前导空格,但我想这可能只是由于 OP 在此处发布文本时如何格式化文本。
【解决方案2】:

您应该使用line.strip() 删除行尾的\n\r

你可以这样试试:

with open("simp.txt", "r") as fp:
    data = fp.readline()
    value = int(data.strip(), 16) / 3
    print value

【讨论】:

    【解决方案3】:

    也许行正在命中不转换为十六进制的值;例如,int('1X',16) 将给出 ValueError。如果这不是问题,请打印 line 并分享值或提供 simp.txt

    【讨论】:

    • 将 simp.txt 添加到编辑部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2023-03-22
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多