最近批量修改文件,重复性工作,浪费人力,尝试用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真香!!!