前几天无意间看见一道题,内容大致是这样的。有一个文件,里面内容是这样的格式
1 aa
2 bb
3 cc
4 dd
现在想插入3 ee,如果存在3 那么把后面内容换成新内容,如果不存在则添加一行。一开始我是这么写的
tmp=[]
with open('1','r') as fd:
lock=0
a=fd.readlines()
for line in a:
if '3' in line:
line=line.replace('cc','ee')
lock=1
tmp.append(line)
if lock==0:
tmp.append('3 ee')
with open('1','w') as fd:
for line in tmp:
fd.write(line)
后来经指点使用字典可以这么写
tmp={}
with open('1','r') as fd:
a=fd.readlines()
for line in a:
tmp[line.split()[0]]=line.split()[1]
tmp['3']='ee'
这样就可以读出来并且修改或者添加,但是却有一个问题。字典是无序的,所以不能保证写入文件时候保证顺序,所以还得排序之后才能写进去,排序之后变成了list,每个元素是tuple类型,这时候转成字符串是有()的,所以使用join连接变成字符串。
with open('1','w') as fd:
tmp=sorted(tmp.iteritems(),key=lambda d:d[0])
for i in tmp:
fd.write(' '.join(i)+'\n')