2016-08-03 53 views
1

我想寫一個字符串到一個文件,只要它現在不在文件中。有效的方式來有條件地寫入文件?

我的第一個想法是做這樣的事情,但它沒有寫入任何文件。

with open("FILE PATH", "a+") as database: 
    for lines in database.read(): 
     if 'MY STRING' in lines: 
      continue 
     else: 
      database.write('MY STRING') 

首先,我在做什麼錯在這裏?其次,假設這是正常運作,是否會有更有效的方法來做到這一點?我假設有。

感謝

+1

'database.read()'將返回一個字符串,因此循環遍歷它將遍歷該字符串中的每個字符。嘗試在database.read()中使用'if'MY STRING''而不是 – TheGirrafish

+0

如果文件爲空,'.read()'返回一個空字符串,所以for循環的主體永遠不會執行。因爲只有當文件不是空的時候,代碼纔有效,因爲你總是閱讀整個文件,即使'我的字符串'出現在前面。告訴我們你想要什麼以及該文件應該如何結構化,因爲'lines'有點暗示... – dhke

+1

@TheGirrafish你的實現工作。 – Harrison

回答

1

使用database.read()將閱讀您的文本文件,並返回一個包含整個文件一個字符串。遍歷該字符串將單獨返回該字符串中的每個字符,因此您不會在其中找到'MY STRING'。簡單地看爲'MY STRING'的文件內,像這樣一個整體:

with open("FILE PATH", "a+") as database: 
    if 'MY STRING' not in database.read(): 
     database.write('MY STRING') 

你不需要第一if語句看到,因爲它只是一個continue,這樣你只有一個if,使得它多一點效率。