2012-01-19 15 views
-1

我想創建一個文本文件並逐行添加數據。如果文件中已經存在數據行,則應該忽略它。否則,它應該被追加到文件中。如何同時訪問文件以添加/編輯/刪除數據?

+0

這聽起來像你需要使用一個數據庫,而不是一個平面文件。如果您可以提供更多細節,我們可以幫助更好。 –

+0

這裏我沒有維護數據庫來處理數據,只使用平面文件。我認爲這個任務是python中的一個簡單腳本,但是在實現這個過程時,這對於處理許多用戶的併發訪問來說有點難度。與此同時,我是Python新手,對python沒有太多經驗。 – pradeekrathnayaka

回答

0

我做到了這樣,

def retrieveFileData(): 
    """Retrieve Location/Upstream data from files""" 
    lines = set() 
    for line in open(LOCATION_FILE): 
     lines.add(line.strip()) 
    return lines 

def add_line(line): 
    """Add new entry to file""" 
    f = open(LOCATION_FILE, 'a') 
    lines = retrieveFileData() 
    print lines 
    if line not in lines: 
     f.write(line + '\n') 
     lines.add(line) 
     f.close() 
    else: 
     print "entry already exists" 

if __name__ == "__main__": 
    while True: 
     line = raw_input("Enter line manually: ") 
     add_line(line) 
     if line == 'quit': 
      break 
+1

當你修改我的代碼時,你忘了確保文件在它打開的代碼路徑中被關閉。你應該使用'with'語句,或者將'f.close()'移動到'add_line的末尾' –

2

你幾乎肯定會更好地閱讀該文件並編寫新的更改版本。在大多數情況下,它會更快,更容易,更少出錯並且更具可擴展性。

+0

感謝Martin,有人可以通過代碼示例來解釋我,最好是在python中使用線程嗎?這是網絡文件和大量用戶同時訪問。具有多個用戶的 – pradeekrathnayaka

+2

對同一個文件的寫入操作很棘手,應該避免。所有的庫都寫入相同文件的末尾(請參閱日誌記錄)。但是,如果你都改變同一個文件 - 想想更好的解決方案 –

+0

使用一些更合適的數據結構,如事務數據庫而不是文件 – wim

1

如果你的文件不是那麼大,你可能只是做這樣的事情:

added = set() 

def add_line(line): 
    if line not in added: 
     f = open('myfile.txt', 'a') 
     f.write(line + '\n') 
     added.add(line) 
     f.close() 

但是,如果你擔心併發這不是一個好主意,存儲大量數據在文件中,或基本上除了快速和一次性的東西外。

+0

Ther是輸出中返回的錯誤,稱爲「如果行不在集合中: TypeError:'type 'object is not iterable' – pradeekrathnayaka

+0

@ user30412 - 對不起,我的意思是把'added'放在'set'中。現在應該工作。 –

相關問題