2013-10-09 67 views
0

我正在尋找一個包含其中的數據的列表並追加它,以便在下次執行代碼時保存它。到目前爲止,我有這個工作,但是當我再次執行代碼時,它不包括輸入的新數據。有什麼建議麼?Python,如何將用戶輸入保存到列表中

def the_list(): 

    data = ['data1', 'data2', 'data3 ' , 'data4', 'data5' ] 

    for i in data: 
     print (i) 

    print (' would you like to add') 
    a = input() 

    if a == ('yes'): 
     b = input() 

     data.append(b) 
     print (data) 

the_list() 
+0

你需要某種形式的持久性機制,我能想到的最簡單的一種是純文本文件。 – skytreader

+1

我認爲使用'pickle'或'json'可能會更簡單,只是因爲你可以用一行'pickle.dumps(data,datafile)'來讀寫整個文件。不需要擔心記住添加/刪除換行符,不管是否引用東西等等。 – abarnert

回答

1
def the_list(): 
    try: 
     with open('data.txt', 'r') as f: 
      data = [line.strip() for line in f] 
    except: 
     data = [] 

    for i in data: 
     print(i) 

    print (' would you like to add') 
    a = raw_input() 

    if a == 'yes': 
     b = input() 

     data.append(b) 
     print (data) 

    with open('data.txt', 'r') as nf: 
     nf.write('\n'.join(data)) 
the_list() 
0

但是當我再次執行代碼,它不包括已輸入

當然,新的數據 ,因爲列表是在內存中。您必須將其保存到文件或數據庫才能保存。

例如,閱讀Input and Output in python

2

如果你的意思是整個執行數據,一切都保存在「直播」節目的內存在執行結束時被丟棄,所以你必須將數據保存到一個文件(或一些其他持久性介質),然後讀回英寸

您可以保存到一個文件一樣簡單的字符串,也可以使用pickle輕鬆序列像列表對象。

使用簡單的字符串

與代碼包裝你的程序加載和數據保存到一個文件:

data=[] 
try: 
    old_data= open("save_data", "r").read().split('\n') 
    data.extend(old_data) 
except: 
    print ("Unable to load old data!") 
    data = ['data1', 'data2', 'data3 ' , 'data4', 'data5' ] 

#YOUR PROGRAM HERE 

try: 
    with open("save_data", "w") as out: 
     out.write('\n'.join(data)) 
except: 
    print ("Unable to write data!") 

當然,你如果做了一些工作,防止發生重複的data他們一定不會出現。

使用泡菜

import pickle 

data_fn = "save_data" 
data=[] 
try: 
    with open(data_fn, "rb") as data_in: 
     old_data = pickle.load(data_in) 
     data.extend(old_data) 
except: 
    print ("Unable to load last data") 
    data = ['data1', 'data2', 'data3 ' , 'data4', 'data5' ] 


#REST OF YOUR PROGRAM 

try: 
    with open(data_fn, "w") as data_out: 
     pickle.dump(data, data_out) 
except: 
    print ("Unable to save data") 
+1

OP似乎在使用Python 3('input'和'print'作爲函數),所以您應該這樣做。 (如果你真的想要解釋的差異,你可以,我只是把括號圍繞你的'print'所以它工作在兩個2.x和3.x,並留在這一點。) – abarnert

+0

謝謝,好趕上 – erjoalgo

+1

啊,只是看到你的實施。好多了:) –

相關問題