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=
id=
id=
#id=
id=
id=
id=
#id=
id=
id=
id=
其中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=
#id=
id=
#id=
id=
#id=
id=
#id=
#id=
id=
#id=
Python 逐行修改txt每条记录的内容的更多相关文章
- python 逐行读取txt文件
逐行读取txt文件 path = r'D:\123456\1.txt'with open(path, 'r', encoding='utf-8') as f: for line in f: ...
- SQL -------- JDBC 修改某条记录得内容
package demo; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; ...
- 使用SpringMVC的crud操作时,进行数据修改,但是修改成功后,页面无法显示lastName属性值(被修改的那条记录)
我这个错误的原因在于,把map的键写错了,它必须和类名第一个字母小写相同 @ModelAttribute public void getEmployee(@RequestParam(value=&qu ...
- python基础-修改haproxy配置文件
需要掌握的知识: 1.函数 2.文件处理 3.tag的用法 4.程序的解耦 需求: 1:查询 2:添加 3:删除 4:修改 5:退出 haproxy.conf 配置文件内容: global log 1 ...
- Oracle 取前几条记录
今天看了篇文章,对oracle取前几条数据的方式和说明,总结比较全,学习了,做个记录点.oracle 取前10条记录 以下内容是原始文章内容,用于做留存阅读. 1.oracle 取前10条记录 1) ...
- 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录
孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...
- dedecms如何修改共0页/0条记录为英文版?
近日,在测试一个网站功能的时候,发现在搜索结果的下面为中文的“共0页/0条记录”,但客户的网站为英文版,所以我们需要将搜索的结果信息也要显示为英文,好了,我们开始动手修改dedecms的文件,以达到我 ...
- salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)
salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...
- python 往mysql数据库中插入多条记录。
最近想写mysql库,用到insert into语句,如何一次性将多条记录插入库表中呢. MySQLdb提供了两个执行语句的方法:一个是execute(),另一个是executemany() exec ...
随机推荐
- jQuery文本框中的事件应用
jQuery文本框中的事件应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- Java数据结构——树的三种存储结构
(转自http://blog.csdn.net/x1247600186/article/details/24670775) 说到存储结构,我们就会想到常用的两种存储方式:顺序存储和链式存储两种. 先来 ...
- 2.3.0-alpha1 is too old 解决办法
放个周末,一来就遇到一个奇葩的问题,"Error:(1, 0) The android gradle plugin version 2.3.0-alpha1 is too old, plea ...
- sublime3 的安装
1.官网下载 2.无耻的注册码(help) https://www.douban.com/note/539496964/ 常用 —– BEGIN LICENSE —–Alexey PlutalovSi ...
- 修改html页面文字选中样式
::selection { background-color: #31B0D5; color: #fff; text-shadow: 0 1px 0 rgba(0,0,0,.2); }
- HDU 1690 Bus System
题目大意:给出若干巴士不同价格的票的乘坐距离范围,现在有N个站点,有M次询问,查询任意两个站点的最小花费 解析:由于是多次查询不同站点的最小花费,所以用弗洛伊德求解 时间复杂度(O^3) 比较基础的弗 ...
- POJ1002
转化为七位数字 #include<iostream> #include<map> #include<cstring> #include<cstdio> ...
- 百度地图多点路径加载以及调整页面js
$(document).ready(function () { /*用正则表达式获取url传递的地址参数,split后获得地址数组*/ bmap = new BMap.Map('mapcontaine ...
- maven 配置问题
① 错误 Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' 原因:pom.xml文件下载ojdbc14-10.2.0.3. ...
- mysql使用load导入csv文件所遇到的问题及解决方法
使用navicat的客户端插入csv的数据文件,有一种非常简单的方式,即使用导入向导,直接根据数据匹配即可. 使用load的方式. 由于本项目中插入数据表量大而且格式统一,故首先使用创建字段creat ...