替换文件内容

前几天无意间看见一道题,内容大致是这样的。有一个文件,里面内容是这样的格式

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')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值