【问题标题】:Reading from a file and converting to a float in Python从文件中读取并在 Python 中转换为浮点数
【发布时间】:2020-01-07 14:10:29
【问题描述】:

我想打开一个 .txt 文件进行读写,将内容保存到一个变量中,然后将该变量转换为 float 类型。将 str 类型变量转换为 float 类型时,我收到 ValueError: could not convert string to float: ''

file = open("my_file.txt", "r+")
value = file.read()
float_value = float(value) 

我的理解是,如果 .txt 为空,我会收到错误消息。如果 .txt 包含数字并且使用“r”,则不会出现错误。但是我想读取和写入文件,如果我使用 w+ 或 r+ 它会自动擦除 .txt 因此不允许转换。

如何打开文件进行读写,以免擦除 .txt 的内容?

我在类似的帖子中发现了这个问题并尝试了以下解决方案,但它对我不起作用。

with open('my_file.txt', 'w+') as file:
    file.seek(0)
    value = file.read()
    float_value = float(value) 

更新:

我暂时解决了这个问题,从.txt中的0开始,然后:

  1. 在“r”中打开文件
  2. 将值存储在变量中
  3. 将存储的 str 值转换为浮点数
  4. 关闭文件

  5. 再次打开文件,但这次是“w”(.txt 被擦除,但我的值已经存储在浮点变量中)

  6. 对浮点变量执行任何计算。
  7. 将新值转换为 str 类型。
  8. 将新值作为 str 写入 .txt

我希望 r+ 或 w+ 将允许我执行这些操作而无需打开和关闭文件两次。如果我找到更易于实施的解决方案,我将进行第二次更新。

这里是临时解决方案:

file = open("my_file.txt", "r")
value = file.read()
float_value = float(value)
file.close()

new_number = 5.5

file = open("my_file.txt", "w")
new_value = float_value + new_number
str_value = str(new_value)
file.write(str_value)
file.close()

更新2:

我收到了一个可行的解决方案,它在下面的 cmets 中有标记。

【问题讨论】:

  • 你试过'a'而不是'w'吗?
  • @רועי אבידן 从我读到的'a'用于附加到文件。我想读写,以便文件中的值更改而不是附加新值。
  • 如果您将整个文件作为单个浮点数读取,您希望如何在下次尝试读取时追加到文件而不使其无效?如果新文件具有不同的格式(多个浮点数而不是一个),则使用不同的文件名可能是有意义的。
  • @SPersonDPerson 查看我的解决方案
  • @tobias_k 感谢您的回答。我不想像你说的那样附加到文件中。我只是想读取 .txt 的内容,即数字 0。然后我想做一些简单的事情,比如 .txt 的内容为 float + 10。我期望的最终结果是 10.0。

标签: python


【解决方案1】:

这是最终的解决方案:

您可以最小化代码行:

file = open("fileName.txt", "r+")
value = file.readlines()
for i in value:
    file.seek(0)
    file.write(str(float(i)+value you want to add))

【讨论】:

  • 感谢您的回答。您的解决方案似乎适用于您的示例,但不适用于我的示例。 .txt 文件只包含 0。当我打开文件并读取它的值时,我稍后想添加到原始值。您的解决方案似乎是追加而不是添加和替换。例如值为 0,然后我添加 10,您的解决方案 .txt 返回 010 而不是 10。
  • @SPersonDPerson 您将通过上述解决方案获得输出。试试看告诉我
  • 谢谢!这确实按预期工作,我标记了你的答案。你能向我解释一下 file.write(str(float(i) + value)) 背后的逻辑吗?或者请给我一些我可以阅读的文档。
  • @SPersonDPerson 在 file.write() 我们只能传递字符串。所以我把它转换成字符串。当您尝试传递 int 或 float 时,它会抛出以下错误:- TypeError: write() argument must be str, not int
  • 再次感谢您,现在说得通了。
【解决方案2】:

首先,如果您不想擦除文件的内容,则必须使用附加模式打开它。

with open("myfile.txt", "ra") as myfile:

其次,您得到的错误是因为您不能将每个字符串都转换为浮点数。 如果您尝试转换的文本不是有效数字,则会引发错误。 在这种情况下,您必须自己处理。

例如,如果我们假设每一行有 1 个字符,您可以在循环中添加以下逻辑

try:
    char_from_file = myfile.read()
    float_value = float(char_from_file)
    floats.append(float_value)
except ValueError: # char is is not a number
    pass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多