Python:打开一个文件,搜索然后追加,如果不存在

Python:打开一个文件,搜索然后追加,如果不存在,python,Python,我试图将字符串附加到文件中,如果该字符串在文件中不存在。但是,使用a+选项打开文件不允许我立即执行此操作,因为使用a+打开文件会将指针指向文件的末尾,这意味着我的搜索将始终失败。除了先打开文件以进行读取,然后关闭并再次打开以进行追加,还有什么好方法可以做到这一点吗 显然,在代码中,下面的代码不起作用 file = open("fileName", "a+") 我需要做以下事情来实现它 file = open("fileName", "r") ... check if a string exis

我试图将字符串附加到文件中,如果该字符串在文件中不存在。但是,使用
a+
选项打开文件不允许我立即执行此操作,因为使用
a+
打开文件会将指针指向文件的末尾,这意味着我的搜索将始终失败。除了先打开文件以进行读取,然后关闭并再次打开以进行追加,还有什么好方法可以做到这一点吗

显然,在代码中,下面的代码不起作用

file = open("fileName", "a+")
我需要做以下事情来实现它

file = open("fileName", "r")
... check if a string exist in the file
file.close()

... if the string doesn't exist in the file
file = open("fileName", "a")
file.write("a string")
file.close()

可以使用设置文件对象的当前位置。要跳转到文件的开头,请使用

f.seek(0, os.SEEK_SET)
要跳转到文件末尾,请使用

f.seek(0, os.SEEK_END)
在您的情况下,要检查文件是否包含某些内容,然后可能会将append附加到文件中,我将执行以下操作:

import os

with open("file.txt", "r+") as f:
    line_found = any("foo" in line for line in f)
    if not line_found:
        f.seek(0, os.SEEK_END)
        f.write("yay, a new line!\n")

如果
指针
位于任何一行上,则保持输入文件不变;如果指针缺失,则将其附加到文件末尾:

with open("filename", "r+") as file:
    for line in file:
        if needle in line:
           break
    else: # not found, we are at the eof
        file.write(needle) # append missing data
我已经对它进行了测试,它可以在Python2(基于stdio的I/O)和Python3(基于POSIX读/写的I/O)上运行


代码在循环Python语法之后使用了晦涩的
else
。请参见

您需要的是查找操作。是否要检查子字符串、行或实际单词?嗯。在我的例子中,是一个子字符串。@glglgl:可能是一个downvoter不熟悉“
else
after a loop”语法,他们认为我使用了错误的缩进。好东西。飞行,因为这对我来说是新的;else语句与for/while循环一起使用的是一个称为“completion子句”的概念。谢谢。我还需要创建文件,如果它不存在。但是,在这个问题上使用“a+”不起作用。@Abiral:您可以捕获
FileNotFoundError
并创建新文件。谢谢您的回答。我重新排列了我正在检查的文件的内容,不知怎的,我正在检查的字符串在文件中被复制了。我必须先使用
f.seek(0,os.seek\u SET)
跳转到文件的开头,然后再执行检查,在您的情况下,该检查是
line\u找到的
,然后在写入文件之前跳转到文件的结尾。