@Rafa,为了您更好地理解我在评论中的含义,我必须编写完整的答案才能附上代码和屏幕截图。
比方说,peliculas.txt
文件的格式如下:
您可以根据以下3个命令导入在Python这样的文件:
fileIN=open('peliculas.txt','r')
filmsDoneList=fileIN.readlines()
fileIN.close()
所以你基本上打开文件,每一行由于进口至readlines()
,然后关闭该文件,因为其内容在filmsDoneList
中可用。后者有以下内容(PyCharm):
显然这个名单很长,不适合我的屏幕,但你明白了吧。
你现在可通过以下回路来摆脱恼人的换行符标签'\r\n'
的:
for id in range(len(filmsDoneList)):
filmsDoneList[id]=filmsDoneList[id].strip()
现在filmsDoneList
的形式为: 现在好多了,是吗?
现在,让我们说你要添加以下影片:
newFilms=['The Exorcist','Back to the Future','Aliens','Back to the Future']
为了使您的代码更健壮,我已经添加回到未来的两倍。基本上你可以通过set()
函数来清除newFilms
中的重复项。这将转换newFilms
在去除重复一个set
,但我们将它归功于转换回列表这个命令:
newFilms=list(set(newFilms))
现在newFilms
的形式为:
现在,一切都已排序,是时候检查newFilms
中的项目是否已在filmsDoneList
之中,回想一下是peliculas.txt
的内容。
重新打开peliculas.txt
如下:
fileOUT=open('peliculas.txt','a')
的'a'
标签意味着“追加”,所以基本上你写的一切都将被添加到该文件,但不从任何东西。
和主回路云:
for film in newFilms:
if film in filmsDoneList:
pass
else:
fileOUT.write(film+'\n')
的pass
的意思是 “什么都不做”。 write
命令还将换行标签附加到影片标题:这将保持每行1格的前一格式。在这个循环结束时,你可能会关闭fileOUT
。
产生的peliculas.txt
是
,正如你所看到的,回到未来在newFilms
但不追加到该文件的末尾,因为已经是它。相反,驱魔者和外星人已经被追加到这个文件的底部。
如果您的文件标题以逗号分隔,则此方法仍然有效。然而,你必须在第一个for循环之后添加
filmsDoneList=filmsDoneList[0].split(',')
。同样在write
函数中(在上一个for循环中),您可能想用逗号替换换行值。
这种方法更清洁,我认为它还可以解决您一直存在的问题,并避免在循环中连续打开/关闭文件。希望这可以帮助!
你还应该解释这些txt文件包含什么以及你的目标是什么。 – Alessiox
那么,它是一个文件,其中包含来自我的Db的所有解析标题。如果我添加一个新标题,我希望Python比较文件txt以检查是否存在。然后做 – Rafa
而不是用逗号分隔您的标题,我建议您在.txt文件中以不同的方式组织您的标题:每行1个标题。这会让事情变得更容易,因为您可以执行以下步骤。 1)使用'fopen()'打开文件; 2)使用'readlines()'创建一个python列表,其中1个元素是1个标题,所以你不需要'split()'命令; 3)用for循环迭代这样的列表以检查给定标题是否存在。 – Alessiox