List 如何根据其他文件删除txt文件中的行';内容,蟒蛇3

List 如何根据其他文件删除txt文件中的行';内容,蟒蛇3,list,python-3.x,readfile,List,Python 3.x,Readfile,我有两个txt文件(文件_srs.txt和文件_rm.txt) 这两个文件的内容是: # content of file_srs.txt, note \n is a newline symbol APPLE\n PEAR\n ORANGE\n BANANA\n MELON\n # content of file_rm.txt PEAR\n BANANA\n 我想根据文件_rm.txt中的内容删除文件_srs.txt中的内容。因此,在本例中,我想删除文件_srs.txt中的'PEAR\n'和

我有两个txt文件(文件_srs.txt和文件_rm.txt)

这两个文件的内容是:

# content of file_srs.txt, note \n is a newline symbol
APPLE\n
PEAR\n
ORANGE\n
BANANA\n
MELON\n

# content of file_rm.txt
PEAR\n
BANANA\n 
我想根据文件_rm.txt中的内容删除文件_srs.txt中的内容。因此,在本例中,我想删除文件_srs.txt中的'PEAR\n'和'BANANA\n',得到的文件是:

# resulting content in file_srs.txt
APPLE\n
ORANGE\n
MELON\n
在实际情况中,文件_srs.txt中可能有数百个名称,文件_rm.txt中可能有数十个名称。因此,有效的方法是必要的


谢谢。

如果您希望在速度上获得最有效的解决方案,并且不介意会浪费空间,您可以使用空格等替代要删除的单词行(包括新行字符)


但是,如果您不想浪费空间,您必须覆盖整个文件,即您必须将文件\u srs.txt的内容加载到内存中,删除文件\u rm.txt的所有单词,然后您必须使用内存中的新内容覆盖文件\u srs.txt,这是文件_srs.txt,没有文件_rm.txt中的单词。

您首先应该读入原始
original.read().splitlines()
中的行,并将此列表分配给一个变量。请注意,这与包含以下内容的文件的
original.readlines()
不同:

APPLE
PEAR
ORANGE
BANANA
MELON
original.read().splitlines()

鉴于

original.readlines()
返回
['APPLE\n','PEAR\n','ORANGE\n','BANANA\n','mellion']

使用实际的行字符串比使用包含
\n
的行字符串更容易,因为这样便于比较;在与
'BANANA'
进行比较之前,无需检查(例如)
'BANANA\n'
是否具有
\n

然后,应该使用相同的方法读入第二个文件中的数据。使用这两个列表,您可以创建一个新列表(如果您想处理以后要保留的行),或者直接写入一个新文件:

让我们假设
所有行=['苹果','梨','橙','香蕉','瓜']

lines\u delete=['PEAR','BANANA']

lines_to_keep = []
        for line in all_lines:
            if line not in lines_delete:
                lines_to_keep.append(line)
然后可以将这些行写入新(或相同)文件:

示例程序:
with open("new.txt","w") as new:
    for line in lines_to_keep:
        line = line+"\n"
        new.write(line)
with open("original.txt","r") as original:
    all_lines = original.read().splitlines()

    with open("delete.txt","r") as delete:
        lines_delete = delete.read().splitlines()
        print(lines_delete)
        lines_to_keep = []
        for line in all_lines:
            if line not in lines_delete:
                lines_to_keep.append(line)

with open("new.txt","w") as new:
    for line in lines_to_keep:
        line = line+"\n"
        new.write(line)