从文本文件中删除名称

时间:2016-12-01 13:53:06

标签: python python-3.x

我遇到的另一个问题是,我有这段代码从文本文件中删除一个名字。我不确定为什么,但有时它工作正常并删除了名称,但通常它没有,是否有更好的方法这样做100%的时间?我已经改变了我的文件路径和文件名,因为你们不需要它。

with open(r"MyFilePath\MyFile.txt","r") as file:
        participants=[]
        for line in file:
            participants.append(line)
    file.close()
    leavingParticipant=input("Enter leaving participant: ")
    file=open(r"MyFilePath\MyFile.txt","w")
    for participant in participants:
        if participant!=leavingParticipant+"\n":
            file.write(participant)
    file.close()

3 个答案:

答案 0 :(得分:2)

首先,您不需要读取行并将它们手动附加到列表中,因为无论何时打开文件,open()函数都会返回一个文件对象,该对象是一个包含所有行的类似迭代器的对象。或者,如果要缓存它们,可以使用readlines()方法。

其次,当您使用with语句时,您不需要关闭该文件,这正是其关闭块末尾文件的作业之一。

考虑到上述注意事项,您可以选择执行此操作,最好的选项是使用临时文件对象一次读取和修改文件。幸运的是,python为我们提供了tempfile模块,在这种情况下你可以使用NamedTemporaryFile方法。并使用shutil.move()将临时文件替换为当前文件。

import tempfile
import shutil

leavingParticipant=input("Enter leaving participant: ")
filename = 'filename'
with open(filename, 'rb') as inp, tempfile.NamedTemporaryFile(mode='wb', delete=False) as out:
    for line if inp:
        if line != leavingParticipant:
            put.write(line)


shutil.move(out.name, filename)

答案 1 :(得分:2)

with open(r"MyFilePath\MyFile.txt","r") as file:
    participants=[]
    for line in file:
        participants.append(line)

leavingParticipant=input("Enter leaving participant: ")

with open(r"MyFilePath\MyFile.txt","w") as file:
    for participant in participants:
        if leavingParticipant != participant.strip():
            file.write(participant)

您无需手动关闭上下文管理器中的文件(with..as语句)。我们不需要尝试使用我们需要的信息周围的空白,而是将其删除以进行比较。

答案 2 :(得分:0)

让我们重新编写一些代码。首先file是保留字,所以最好不要超载它。其次,由于您使用with打开文件,因此无需使用.close()。当with子句结束时,它会自动执行此操作。您无需遍历参与者列表。有几种方法可以处理从列表中删除项目。在这里使用.remove(item)可能是最合适的。

with open(r"MyFilePath\MyFile.txt","r") as fp:
    participants=[]
    for line in fp:
        participants.append(line.strip())  #remove the newline character

leavingParticipant = input("Enter leaving participant: ")

with open(r"MyFilePath\MyFile.txt","w") as fp2:
    if leavingParticipant in participants:
        participant.remove(leavingParticipant)
    file.write('\n'.join(participant))