@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