需求:
数据库存储文件最后一行正常情况是/,但是由于开发人员编码不规范,例如存在空格、制表符、换行、回车,影响后续读写文件,因此对文件最后一行进行批量处理,如果还有少量不符合的进行手动修改。
先理一下思路(全文以utf-8格式处理)
①首先要获取当前路径,然后将当前路径下所有文件写入txt中,用来保存文件名
②依次打开文件,读取文件内容,把最后一行赋值给另一个单独变量
③判断最后一行是否符合要求(我这里改的是最后一行,当然你可以改其他指定行)
看着好像真的挺简单的,真的写的时候遇到了蛮多坑,所以打算记录下
一.获取要处理的文件名写入txt
def writefilename():
filepath = os.getcwd() + '\\'
filelist = os.listdir(filepath)
with open('file.txt','w+') as filetxt:
for data in filelist:
filetxt.writelines(data + '\n')
注意,我的脚本是放在处理文件同目录,所以需要加反斜杠,加两个不需要我多说了吧
写入的时候加'\n'换行,是为了方便后面读取的时候以这个分割,不容易出错 - -
二.获取最后一行并进行处理
在这里我用的方法是先自定义一个函数(changelines)用于处理修改文件,该函数要求三个输入,分别是文件路径,修改函数,修改内容
changelines
然后再循环读取文件最后一行,并判断格式,进行处理:
注意,我这里读取行数用了mmap方法,空文件会报错,所以首先需要判断文件大小不为0!
def changelastline():
with open('file.txt','r') as readfile:
files = readfile.readlines()
for filename in files:
filename = filename.split('\n')[0]
if re.search('PCKG',filename) is not None:
size = os.path.getsize(filename)
if size != 0:
with open(filename,'r',encoding='UTF-8',errors='ignore') as filecontent:
map = mmap.mmap(filecontent.fileno(),length=0,access=mmap.ACCESS_READ)
count = 0
while map.readline():
count += 1
map.close()
lastlinetxt = filecontent.readlines()
lastline = lastlinetxt[count-1]
if lastline == '/':
with open(filename,'a',encoding='UTF-8',errors='ignore') as f:
f.write('\n'+'SHOW ERRORS;'+'\n')
else:
print('格式正确')
三.谈谈遇到的坑
我觉得涉及文件最大的坑还是在编码,打不开文件,读不到文件,读到格式有问题,研究了很久
首先在文件头记得添加**# --coding:utf-8 -**
问题来了,要修改最后一行,那最后一行的格式到底是怎么样的?
用****with open时,filename,'a',encoding='UTF-8',errors='ignore',参数不可以少,如果少了error会报错,我在python3环境下是这样的
用with open(filename,'rb+')可以看到输出的是字节形式的最后一行
然后再去判断,我代码中最后的if 可以有很多个条件判断,我这里只写了一种情况,然后我在.bat文件中执行方便很多
因为我获取的是文件最后一行,所以用mmap方法读取了文件行数,如果你是知道要修改文件指定行数的话,可以直接拿changelines()函数使用
看了网上无数种方法,修改某行内容基本上都是通过关键字,其实这样不可靠,万一文件内容很大,读取也费时间。
有需要可以自行下载,其实代码都已经写在上面了
changetxt.py_批量修改文件的最后一行-Python文档类资源-CSDN下载
如果大家有更好的方法或者有技术方面的问题,可以一起探讨,我也是初学python,现在还只是在文件处理这一块
转载请注明出处
版权归原作者 Yussio 所有, 如有侵权,请联系我们删除。