相关文章推荐
失眠的烤红薯  ·  python qt textBrowser ...·  1 月前    · 
帅气的领带  ·  【Pyspark ...·  2 周前    · 
近视的橙子  ·  python ...·  1 周前    · 
腼腆的烈马  ·  [Anaconda]——Linux下cond ...·  4 天前    · 
眉毛粗的电梯  ·  python ...·  3 天前    · 
坏坏的凳子  ·  定序 - ...·  7 月前    · 

在Python中从文件中读取并转换为浮点数

0 人关注

我想打开一个.txt文件进行读写,将其内容保存到一个变量中,然后将该变量转换为float类型。当把str类型的变量转换为float类型时,我收到一个ValueError。【替换代码0

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开头,然后。

  • Opening the file in 'r'
  • Storing the value in a variable
  • Converting the stored str value into a float
  • Closing the file

  • 再次打开文件,但这次是以'w'的形式(.txt被抹去了,但我的值已经存储在一个浮动变量中)。

  • Performing any calculations to the float variable.
  • Converting the new value to a str type.
  • Writing the new value as str to .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()
    

    UPDATE2:

    我收到了一个有效的解决方案,它在下面的评论中标明。

    5 个评论
    Have you tried 'a' instead of 'w' ?
    @רעוי אברידן 从我读到的内容来看,'a'是用来向文件追加的。我想读和写,使文件中的值发生变化,而不是追加一个新值。
    如果你把整个文件作为一个单一的浮点来读,你想怎样追加到文件中而不使它在下次试图读它时失效?如果新文件有不同的格式(多个浮点代替一个),使用不同的文件名可能是有意义的。
    @SPersonDPerson Check out my solution
    @tobias_k 谢谢你的回答。我不是像你说的那样试图追加到文件中。我只是想读取.txt的内容,也就是数字0。然后我想做一些简单的事情,比如将.txt的内容作为float + 10。我希望最终的结果是10.0。
    python
    S Person D Person
    S Person D Person
    发布于 2020-01-07
    2 个回答
    Vaibhav Jadhav
    Vaibhav Jadhav
    发布于 2020-01-07
    已采纳
    0 人赞同

    这里是最终的解决方案。

    你可以尽量减少代码行。

    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
    再次感谢你,现在明白了。
    gpopides
    gpopides
    发布于 2020-01-07
    0 人赞同

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

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

    第二,你得到的错误是因为你不能将每个字符串转换为浮点数。 如果你试图转换的文本不是一个有效的数字,就会出现错误。 在这种情况下,你必须自己处理它。

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

    char_from_file = myfile.read()