Python 逐行修改txt每条记录的内容

Txt中保存以些数据,这些数据中我们要逐行read line出来进行处理,约定第一个字符为"#"的数据表示已经处理。

一个办法是读取txt,新增另外一个已完成处理txt来保存完成的数据。这样进行对比。但我现在要的效果是在同一个Txt文本里面来标记处理过的数据。

这里面就用道理open方法的各种模式。

原理是这样的:

首先"r"模式打开txt,读取每一行的数据,判断是否已经'#'过, 有"#"说明已经发送过,so continue跳过,
没有"#"的,进行逻辑发送,当发送状态为成功时UPdate该条记录为"#"
update的时候,先新建对象打开该文件,(不能使用之前"r"模式打开的内容,因为第一次"r",已经保存在内存中,即使update该条记录,上条记录又会覆盖)
且不能用“w”模式打开,为什么呢,因为'w'模式是删除原数据,等在update的时候txt已经为空了。so
在再新建对象以'w+'模式打开,用这个对象去保存update生成的数据。这样就不会覆盖之前update的数据了。


现在先整一个txt为list.text 内容如下
id=12
id=53
id=89
#id=13
id=10
id=43
id=67
#id=98
id=76
id=33
id=86

其中id= 13与98的已经处理过了

代码:

# -*- coding: utf-8 -*-
import time
import random
f = open("list.txt", "r", encoding='utf-8')
data = f.readlines()

'''
发送方法
'''
def sending(i):
    print('发送……'+i)
    rand=random.randint(1, 6)  # 随机生成发送失败的概率
    if rand>=2:
        return 1
    else:
        return False

'''
写入 “#”
w+打开文件会将原文件内容删除,可以同时对文件进行读写
r+打开文件会保持原文件内容不变,同样可以同时对文件进行读写
'''
def writeD(current):
    cid = 0
    string = ''
    rf = open("list.txt", "r+", encoding='utf-8')  # rf是时时读取txt内容(已经修改过的),f是已经保存在内存中
    for orig in rf.readlines():
        if cid == current:
            # 每完成一个, 给该【0】 记录前添加 #
            string += "#" + orig
        else:
            string += orig
        cid+=1
    rf.close()
    wf=open("list.txt",'w+',encoding='utf-8')  # wf的 w+打开是删除txt内容,写入rf中修改的内容
    wf.write(string)
    wf.close()




j = -1
for i in data:
    j += 1
    if i[0] == '#':
        continue
    status = sending(i)
    if status:
        writeD(j)
    time.sleep(3)  # 休眠3秒

f.close()

运行效果:

#id=12
#id=53
id=89
#id=13
id=10
#id=43
id=67
#id=98
#id=76
id=33
#id=86

 

转载于:https://www.cnblogs.com/dcb3688/p/4608009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值