Python小功能使用-文件遍历和关键词查找替换

2023-04-11 14:46:50

最近批量修改文件,重复性工作,浪费人力,尝试用Python搞一下,果然是真香,废话不多说,干就完了:

1,python遍历文件夹下所有的文件使用

#遍历当前路径下所有文件
import os
def scaner_file (url):
        file  = os.listdir(url)
        for f in file:
            #字符串拼接
            real_url = path.join (url , f)
            #打印出来,是完整路径的文件名,如D:\珍藏txt\
            print(real_url)

借助os库,url是传入的文件夹的路径,f是遍历到的文件名,之后和url进行拼接,就是一个文件完成的路径了,在路径前加url=r'C:\Users\PC\Desktop\珍藏txt',r表示原生字符串,‘\’就不需要考虑转义的问题而写成‘\\’了。

2,Python使用文件替换

一行行的读取txt中的数据,若匹配到关键字,这一行就是我们要修改的数据,然后对这一行数据进行修改并重新写入到新的文件中去

import os
import re
from os import path
#搜索替换关键字
def replacefilestr(filePath):
    print("输入文件名"+filePath)
    fr = open(filePath, "rb")
    #创建一个临时文件,写入数据和,将临时文件重命名替换掉需要修改的文件
    fw = open(filePath + ".bak", "wb+")
    #按行读取文件中的内容
    lineList = fr.readlines()
    needchangesum=0#计数的
    notneedchangesum=0#计数的
    str0='web_type=\"\"'
    str1='web_type=\"\"'
    #文件中的内容存在于lineList中,for循环依次取出并进行修改
    for line in lineList:
        line = line.decode("UTF-8", "ignore")
    #print(line)
        #没匹配到
        if line.find(str0) == -1:
            notneedchangesum=notneedchangesum+1
            line = line.encode()
            fw.write(line)
        #匹配到了
        elif line.find(str1) != -1:
            needchangesum=needchangesum+1
            #匹配到data_type=".*?",这里的.*?是正则匹配
            regex = re.compile(r'data_type=\"(.*?)\"', flags = re.I | re.DOTALL)
            #匹配到之后,用data="zhangpan"替换掉匹配到的数据
            line = re.sub(regex, repl='data_type=\"zhangpan\"',string=line)
            #print ("改之后"+line)
            line = line.encode()
            fw.write(line)
        else:
            line = line.encode()
            fw.write(line)
    fr.close()
    fw.close()
    os.remove(fr.name)#删除原txt
    newName = fw.name.replace(".bak","")#去掉临时文件的.bak后缀
    os.rename(fw.name, newName)#换成新文件名
if __name__ == "__main__":
    #读取1.txt中的内容,并进行筛选替换
    filepath=r'C:\Users\PC\Desktop\珍藏txt\1.txt'
    replacefilestr(url)

3,Python对excel进行数据写入

python和excel交互,我用到的是openpyxl库,安装遇到了一些小问题,找不到openpyxl库,可能pip安装的时候,装到了其他版本的python中了(电脑中存在多个版本的python库),我的解决办法就是把openpyxl库复制一份到vscode中配置的python环境目录下的库中,就可以正常访问了。

import openpyxl
from openpyxl import load_workbook
#打开名为imortTpl.xlsx的一个excel表格
workbook = load_workbook(filename='imortTpl.xlsx')
#定位到sheet名为Sheet1的sheet页
sheet = workbook['Sheet1']
#需要追加写入的数据
data1 = ["xiaoming", "25", "汉子"]
#name="xxiaoming"
#age="20"
#sex="男"
#data1=[name,age,"汉子"]这种形式也是可以的
#将数据写入到sheet1页中
sheet.append(data1)
#保存数据
workbook.save(filename='imortTpl.xlsx')

4,Python中数据查找用到的方法

如下,有find和search两种方法,我用的是search,因为我需要查到的数据,对search到的结果,使用group()方法就可以获取到匹配到的字符串,而不是整个长度的line串。find我不知道怎么提取到匹配到的字符串。

import re
str1=r'siteid=".*?"'#这种写法是正则
str2=r'mode="resp"'#这种写法就是全匹配了
line="x大萨达撒大所多dsssssssssssssssssss"#这条数据是需要查找提取的数据
get1 = re.search(str1,line)#在line中查找str1,可正则
get2 = re.search(str2,line)#在line中查找str2
if geturl!=None:#判断如果查到了数据,则geturl!=None,如果没查到数据,则geturl==None
    mystr1=get1.group()#get1.group则是根据设置的规则在line中查到的字符串
#还有一种查找方式,find
if line.find(str1) != -1:#这种方式是查到了数据,则!=-1,如果没查到,则==-1
    print ("查到了数据")

总结:这是最近尝试些python的一些新技能,不他会用,达到了我所希望的功能就好了。

我的需求是查找许多文件中的关键数据,并将这些数据提取筛选,我就想到了使用python和excel进行交互,将提取到的数据写入到excel中,在使用excel进行筛选达到预期效果。其中的一些代码是在网上找的。如有雷同,那就雷同吧。

欢迎大家交流,再说一句,openpyxl真香!!!

  • 作者:小手冰凉__
  • 原文链接:https://blog.csdn.net/u012871930/article/details/125673595
    更新时间:2023-04-11 14:46:50