我想保存myWords.txt
文件中的唯一字词。我正在搜索一个单词,如果在文件中找到它,它不会写它,但如果找不到,它会写入该单词。问题是,当我第二次运行程序时,指针位于文件末尾并从文件末尾搜索并再次写入上次写入的单词。我尝试在某些位置使用seek(0)
但不起作用。我做错了吗?
with open("myWords.txt", "r+") as a:
# a.seek(0)
word = "naughty"
for line in a:
if word == line.replace("\n", "").rstrip():
break
else:
a.write(word + "\n")
print("writing " +word)
a.seek(0)
break
a.close()
myWords.txt
awesome
shiny
awesome
clumsy
shiny
两次运行代码
myWords.txt
awesome
shiny
awesome
clumsy
shiny
naughty
naughty
答案 0 :(得分:0)
您需要在附加模式下打开文件,方法是设置" a"或者" ab"作为模式。见open()。
当你打开" a"模式,写入位置将始终位于文件的末尾(附加)。您可以使用" a +"允许阅读,向后搜索和阅读(但所有写入仍然在文件末尾!)。
告诉我这是否有效:
with open("myWords.txt", "a+") as a:
words = ["naughty", "hello"];
for word in words:
a.seek(0)
for line in a:
if word == line.replace("\n", "").rstrip():
break
else:
a.write(word + "\n")
print("writing " + word)
break
a.close()
希望这有帮助!
答案 1 :(得分:0)
你有错误的缩进 - 现在它在第一行找到不同的文本并自动添加naughty
,因为它不会检查其他行。
您必须使用for/else/break
构造。 else
与for
具有相同的缩进。
如果程序找到naughty
,则会使用break
离开for
循环,else
将被跳过。如果for
未找到naughty
,则表示break
未使用else
,则会执行with open("myWords.txt", "r+") as a:
word = "naughty"
for line in a:
if word == line.strip():
print("found")
break
else: # no break
a.write(word + "\n")
print("writing:", word)
a.close()
。
with open("myWords.txt", "r+") as a:
word = "naughty"
found = False
for line in a:
if word == line.strip():
print("found")
found = True
break
if not found:
a.write(word + "\n")
print("writing:", word)
a.close()
它与
类似Column1 Column2
10 that is the time
10 what time is the match
0 where is the car?