0


python批量修改文件内容(修改文件指定行)

需求:

数据库存储文件最后一行正常情况是/,但是由于开发人员编码不规范,例如存在空格、制表符、换行、回车,影响后续读写文件,因此对文件最后一行进行批量处理,如果还有少量不符合的进行手动修改。

先理一下思路(全文以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,现在还只是在文件处理这一块

转载请注明出处

标签: python

本文转载自: https://blog.csdn.net/qq_36527924/article/details/117819225
版权归原作者 Yussio 所有, 如有侵权,请联系我们删除。

“python批量修改文件内容(修改文件指定行)”的评论:

还没有评论