如果文件名称已经存在,如何将名称附加到文件中?

时间:2017-07-15 05:01:43

标签: python python-2.7

我有一个包含名称列表的文件,每行一个名称。

我想检查文件中是否已存在名称。如果它没有,我想将它附加在文件的末尾。

names.txt中

Ben
Junha
Nigel

这是我尝试做的事情:

    name=raw_input(" Name: ")
    with open("names.txt") as fhand:
        if name in fhand:
            print "The name has already been in there"
        else:
            with open("file.txt","a+") as fhand:
                fhand.write(name)

但是找不到现有的名字,我输入的名字总是附加到最后一行。

1 个答案:

答案 0 :(得分:1)

你的总体想法很好,但有些细节已经关闭。

不是打开文件两次,一旦处于读取模式,然后处于追加模式,您可以在读/写(r+)模式下打开一次。

open()返回文件对象,而不是文本。所以你不能只使用if some_text in open(f)。您必须阅读该文件 由于您的数据是逐行构建的,因此最简单的解决方案是使用for循环来迭代文件行。

您无法使用if name in line,因为"Ben" in "Benjamin"将是True。你必须检查名字是否真的相同。

所以,你可以使用:

name=raw_input(" Name: ")
# With Python 3, use input instead of raw_input

with open('names.txt', 'r+') as f:
    # f is a file object, not text.
    # The for loop iterates on its lines
    for line in f:
        # the line ends with a newline (\n),
        # we must strip it before comparing
        if name == line.strip():
            print("The name is already in the file")
            # we exit the for loop
            break
    else:
    # if the for loop was exhausted, i.e. we reached the end, 
    # not exiting with a break, this else clause will execute.
    # We are at the end of the file, so we can write the new 
    # name (followed by a newline) right where we are.
        f.write(name + '\n')