我有一个问题,改变dict值和保存dict到一个文本文件(格式必须相同),我只想改变member_phone字段。
我的文本文件格式如下:
memberID:member_name:member_email:member_phone
我将文本文件拆分为:
mdict={}
for line in file:
x=line.split(':')
a=x[0]
b=x[1]
c=x[2]
d=x[3]
e=b+':'+c+':'+d
mdict[a]=e
当我尝试更改存储在d中的member_phone时,值已更改,而不是由键流,
def change(mdict,b,c,d,e):
a=input('ID')
if a in mdict:
d= str(input('phone'))
mdict[a]=b+':'+c+':'+d
else:
print('not')
如何将字典保存为相同格式的文本文件?
除非你真的想保留字典,否则我认为最好的解决方案是使用csv Python模块来读取文件。
然后,你得到行数据你可以改变member_phone或者其他你想要的;
最后,您可以再次使用CSV模块以相同的格式保存文件
当你打开它的时候。
阅读代码:
import csv
with open("my_input_file.txt", "r") as f:
reader = csv.reader(f, delimiter=":")
lines = list(reader)
编写代码:
with open("my_output_file.txt", "w") as f:
writer = csv.writer(f, delimiter=":")
writer.writerows(lines)
当然,你需要调整你的change()函数:
def change(lines):
a = input('ID')
for line in lines:
if line[0] == a:
d=str(input("phone"))
line[3]=d
break
else:
print "not"
我喜欢使用漂亮的打印模块以非常友好的可读形式存储字典:
import pprint
def store_dict(fname, dic):
with open(fname, "w") as f:
f.write(pprint.pformat(dic, indent=4, sort_dicts=False))
# note some of the defaults are: indent=1, sort_dicts=True
然后,在恢复时,读入文本文件并eval()它将字符串转换回dict:
def load_file(fname):
try:
with open(fname, "r") as f:
dic = eval(f.read())
except:
dic = {}
return dic