【发布时间】: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开始,然后:
- 在“r”中打开文件
- 将值存储在变量中
- 将存储的 str 值转换为浮点数
关闭文件
再次打开文件,但这次是“w”(.txt 被擦除,但我的值已经存储在浮点变量中)
- 对浮点变量执行任何计算。
- 将新值转换为 str 类型。
- 将新值作为 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