如何一次读取并附加到文本文件?

2024-05-19 08:12:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查一个字符串是否在文本文件中,如果不在文本文件中,则追加该字符串。

我知道我可以通过创建两个单独的with方法来实现,一个用于读取,另一个用于追加,但是是否可以在同一个with方法中读取和追加?

我最近想到的是:

with open("file.txt","r+") as file:
    content=file.read()
    print("aaa" in content)
    file.seek(len(content))
    file.write("\nccccc")

我的文件.txt:

aaaaa
bbbbb

当我第一次运行代码时,我得到:

aaaaa
bbbbb
ccccc

但如果我再运行一次,就会出现:

aaaaa
bbbbb
ccc
ccccc

我希望第三行是ccccc

任何人都可以解释为什么最后两个字符在第二次运行时被截断?另外,如何读取文本并将其附加到文件中?


Tags: 文件方法字符串txtreadaswithopen
3条回答

seek()是基于字节的,并且您的文本文件不能用每个字符正好一个字节进行编码。由于read()读取整个文件并将指针放在末尾,因此无论如何都不需要搜索。只要从代码中删除这一行,它就可以正常工作了。

with open("file.txt","r+") as file:
    content=file.read()
    print("aaa" in content)
    file.write("\nccccc")

不要对文本文件使用seek。在所有情况下,内容的长度都不是文件的长度。使用二进制文件读取或使用两个单独的with:

with open("file.txt","r") as file:
    content=file.read()
print("aaa" in content)
with open("file.txt","a") as file:
    file.write("\nccccc")

使用这个:

with open("file.txt","r+") as file:
    content=file.read()
    file.seek(0,2)
    file.write("\nccccc")

在这里,我们将fileObject.seek(offset[, whence])offset 0&;whence 2一起使用,即从末尾寻找0个字符。然后写入文件。

或(交替使用SEEK_END):

import os
with open("file.txt", 'rb+') as file:
    file.seek(-1, os.SEEK_END)
    file.write("\nccccc\n")

在这里,我们寻找文件的SEEK_END(带有os包),然后写入它。

相关问题 更多 >

    热门问题