把光标带到文件的开头?

时间:2016-11-12 04:32:52

标签: python file-handling

我想保存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

2 个答案:

答案 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构造。 elsefor具有相同的缩进。

如果程序找到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?