List 如何根据其他文件删除txt文件中的行';内容,蟒蛇3
我有两个txt文件(文件_srs.txt和文件_rm.txt) 这两个文件的内容是: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'和
# 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)