2017-07-15 48 views
-1

我有一個包含名稱列表的文件,每行一個名稱。如何爲文件添加一個名稱(如果它尚不存在)?

我想檢查文件中是否存在名稱。如果沒有,我想將它附加在文件的末尾。

names.txt中

Ben 
Junha 
Nigel 

這裏是我試圖做的:

name=raw_input(" Name: ") 
    with open("names.txt") as fhand: 
     if name in fhand: 
      print "The name has already been in there" 
     else: 
      with open("file.txt","a+") as fhand: 
       fhand.write(name) 

但現有的名稱是從來沒有發現,而名稱我輸入總是得到追加到最後一行。

+0

看起來你要我們寫一些代碼給你。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[常見問題]和[問] – Skam

+0

可能的重複https://stackoverflow.com/questions/4940032/search-for-string-in-txt-file-python。 –

回答

1

你的總體想法很好,但有一些細節是關閉的。

與其打開文件兩次,一次處於讀取模式,然後是追加模式,您可以在讀取/寫入(r+)模式下打開一次。

open()返回文件對象,而不是文本。所以你不能只用if some_text in open(f)。您必須閱讀文件。
由於您的數據是逐行構建的,因此最簡單的解決方案是使用for循環,該循環將迭代文件的各行。

您不能使用if name in line,因爲"Ben" in "Benjamin"將是True。你必須檢查名稱是否相同。

所以,你可以使用:

name=raw_input(" Name: ") 
# With Python 3, use input instead of raw_input 

with open('names.txt', 'r+') as f: 
    # f is a file object, not text. 
    # The for loop iterates on its lines 
    for line in f: 
     # the line ends with a newline (\n), 
     # we must strip it before comparing 
     if name == line.strip(): 
      print("The name is already in the file") 
      # we exit the for loop 
      break 
    else: 
    # if the for loop was exhausted, i.e. we reached the end, 
    # not exiting with a break, this else clause will execute. 
    # We are at the end of the file, so we can write the new 
    # name (followed by a newline) right where we are. 
     f.write(name + '\n') 
相關問題