python如何打开txt修改内容_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文件

逐行读取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 ...

随机推荐

OutofMemory之PermGen介绍

可参考:https://my.oschina.net/benhaile/blog/214159.

使用pudb调试python

本博客主要用于讲解如何使用pudb进行python调试: 1.安装 sudo pip install pudb pip list查看安装结果: 2.使用 测试程序: #!/usr/bin/env py ...

Java中serialVersionUID

报错信息如下: Adds a default serial version ID to the selected type. Use this option to add a user-defined ...

Linux socket多进程服务器框架二

客户端未解决Bug:子进程或者父进程退出的时候,我无法做到两个进程都调用clt_socket_Destory()方式释放socket句柄, 但是进程退出后,相应的资源也会释放,有一定影响,但是不大,以 ...

sublime text下代码太长brackethighlighter不能正确显示闭合高亮的解决方法

用brackethighlighter显示高亮一直都有这个问题...也没在网上找到解决方案,就一直凑合着用,今天翻着配置文件玩,改了参数发现问题解决了...... 修改search_threshold ...

C#学习第五天

字符串的处理 string可作char的只读数组 下面这段字符表示访问每个字符: string myString="A string."; char myChar=myString ...

WCF基金会

概念: Windows CommunicationFoundation(WCF)是由微软发展的一组数据通信的应用程序开发接口.能够翻译为Windows通讯接口.它是.NET框架的一部分. 简单地说,W ...

Javascript中的async await

async / await是Javascript是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度 ...

Python-可变参数和关键字参数(*args **kw)

前言: Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数. 可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple: **kw是关键 ...

HQL-Query接口

org.hibernate.Query接口 1.Query接口定义有执行查询的方法(完成HQL语句的解析和执行过程并返回查询结果,就像SQL语句没了JDBC接口就成了一个普通的字符串变量) 2.Que ...

你可能感兴趣的:(python如何打开txt修改内容_Python 逐行修改txt每条记录的内容)