2016-07-30 138 views
1

我正在嘗試製作另一個項目的主題列表以供我使用,並將主題存儲在Topics.txt中。但是,當主題存儲在文件中時,我不想要重複的主題。所以當我將我的主題保存到我的Topics.txt文件時,我也將它們保存到Duplicates.txt文件。我想要做的是創建一個條件語句,如果主題在Duplicates.txt中,則不會將主題添加到Topics.txt。我的問題是,我不知道如何創建條件語句來檢查主題是否在Duplicates.txt中列出。如果您掃描諸如「音樂」等關鍵字,並且看到「電子音樂」包含「音樂」一詞,則可能會出現問題。檢查文件中的數據是否有重複項(Python)

Entry = input("Enter topic: ") 
Topic = Entry + "\n" 
Readfilename = "Duplicates.txt" 
Readfile = open(Readfilename, "r") 
Readdata = Readfile.read() 
Readfile.close() 
if Topic not in Duplicates: 
    Filename = "Topics.txt" 
    File = open(Filename, "a") 
    File.append(Topic) 
    File.close() 
    Duplicate = Topic + "\n" 
    Readfile = open(Readfilename, "a") 
    Readfile.append(Topic) 
    Readfile.close() 
+0

一個解決方案,您可以添加一些例子和示例代碼? – cssko

+0

你如何儲存主題?每行一個? – janbrohl

+2

我不確定純文本文件是否真的適合您的需求。一個SQLite表可以有不同的強制執行,也執行關鍵字搜索 –

回答

1

您可以逐行讀取一個文件行,這將導致在這樣一個

Entry = input("Enter topic: ") 
Topic = Entry + "\n" 
Readfilename = "Duplicates.txt" 
found=False 
with open(Readfilename, "r") as Readfile: 
    for line in Readfile: 
     if Topic==line: 
      found=True 
      break # no need to read more of the file 

if not found: 
    Filename = "Topics.txt" 
    with open(Filename, "a") as File: 
     File.write(Topic) 

    with open(Readfilename, "a") as Readfile: 
     Readfile.write(Topic) 
+0

如何轉換以排除該主題的大寫變體? – Capattax

+0

@Capattax看看[字符串方法](https://docs.python.org/3/library/stdtypes.html#string-methods) - 他們可以做很多有用的事情,通常字符串是區分大小寫的('「a」==「A」評估爲「False」) – janbrohl

0

您可以將您的主題存儲在一個集合中。一組是唯一項目的集合。

topics = {'Banjo', 'Guitar', 'Piano'} 

可以使用檢查成員:

>>> 'Banjo' in topics 
True 

您通過.add()

topics.add('Iceskating') 
>>> topics 
set(['Banjo','Guitar', 'Piano', 'Iceskating']) 

的Python 3個文檔上套here添加新的東西,以一組。教程頁面集是here

+0

這對於檢查一個文件中的重複項很有用,但是我有兩個程序將主題添加到'Topics.txt'中。第一個程序手動添加主題,而另一個程序抓取主題頁面。所以,如果我有兩套,每套節目一套,他們只會添加重複到他們各自的套。他們將無法識別另一組中的重複項。 – Capattax

+0

有關集合的好處是,如果您的原始數據中有重複項,它將移除它們。所以如果你有一個'['one','two','two','3']的列表,並且將它複製到一個集合中,那麼這個集合將會是'['one','two','three' ]'。 – cssko

+0

爲了補充說明,看起來您正在做的事情有可能被捲入過分簡單的.txt文件來存儲您的數據。我要第二次@ cricket_007s先前建議使用SQLite表。 – cssko

相關問題