2013-10-09 68 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

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

相关问题