如何删除txt文件中的行,根据其他文件'内容,Python3

时间:2017-03-03 10:40:55

标签: list python-3.x readfile

我有两个txt文件(file_srs.txt和file_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 

我想根据file_rm.txt中的内容删除file_srs.txt中的内容。所以在这个例子中,我想删除' PEAR \ n'和' BANANA \ n'在file_srs.txt中,生成的文件是:

# resulting content in file_srs.txt
APPLE\n
ORANGE\n
MELON\n

在实际情况中,f​​ile_srs.txt中可能有数百个名称,file_rm.txt中可能有数十个名称。如此有效的方法是必要的。

感谢。

2 个答案:

答案 0 :(得分:1)

您首先应该阅读原始<p:commandButton id="notizEintragButton" value="T" process="@this" onclick="PF('paketNotizenDialogWV').show();" /> 中的行并将此列表分配给变量。请注意,这与original.read().splitlines()不同,文件包含:

original.readlines()

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

而,

['APPLE', 'PEAR', 'ORANGE', 'BANANA', 'MELON']返回original.readlines()

使用实际的行字符串比使用包含['APPLE\n', 'PEAR\n', 'ORANGE\n', 'BANANA\n', 'MELON']的行字符串更容易,因为它更容易比较;在将\n'BANANA\n'进行比较之前,无需检查(例如)\n是否'BANANA'

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

让我们说all_lines= ['APPLE', 'PEAR', 'ORANGE', 'BANANA', 'MELON']

lines_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)

答案 1 :(得分:0)

如果您想要速度最有效的解决方案,并且您不介意会浪费空间,您可以使用例如空格覆盖要删除的单词行(包括新行字符)。

但是,如果你不想浪费空间,你必须覆盖整个文件,即你必须将file_srs.txt的内容加载到内存中,删除file_rm.txt的所有单词和然后你必须使用内存中的新内容覆盖file_srs.txt,该文件是file_srs.txt而没有file_rm.txt中的单词。