title: python过滤目录下所有文件包含的关键字 #标题tags: python #标签
date: 2021-12-07
categories: python # 分类
背景
前段时间重装系统了,将原来的博文源文件copy到新系统上后,导致文件的创建日期都成为了我copy到新系统上的日期,一开始没当回事,今天找之前的博客,有引入自己的博文链接,点击链接报错404,才想到,由于我在博文开头没有定义date属性,导致博客的url路径是以博文源文件的创建日期作为路径的一部分的,如:https://lvjianzhao.gitee.io/lvjianzhao/2021/10/31/python数据类型/ ,所以导致之前的链接失效,造成了404,所以想改一下之前的链接,或者改一下博文源文件,增加date属性,不管怎样,总是要找到哪些文件中引入了自己的博文,不是么?
想想这300来篇文章,一个个找的话,估计眼都要找瞎了,正好咱学了半年python,还没怎么用过呢,想着就用python来实现下找到这些文件,以及引用链接的所在行数。
python代码
import os
import re
# 博文所在目录
path = r'E:\blogs\blog\source\_posts'
file_path = os.listdir(path)
# 定义要过滤的关键字
keyword = 'https://lvjianzhao.gitee.io/lvjianzhao/\d{4}/\d{2}/\d{2}'
# 指定过滤结果保存文件
ret_file = r"C:\Users\Administrator\Desktop\ret.txt"
# 由于要多次调用这个正则,故进行预编译,提高程序运行效率
rec = re.compile(keyword)
# 过滤
def grep_keyword(file_name):
linenum = 0
dic_list = {}
with open(file_name, encoding='utf-8', mode='r') as f1:
f_name = f1.name
for line in f1:
linenum += 1
r = rec.findall(line)
if len(r):
dic_list[linenum] = r
f1.flush()
if len(dic_list):
# 将过滤结果写入指定的文件中
with open(ret_file, encoding='utf-8', mode='a') as f2:
flag = '#' * 25
f2.write(f'{flag} {f_name} {flag}\n\n')
for k, v in dic_list.items():
f2.write(f'第{k} 行:{v}\n')
f2.write('\n\n\n\n')
os.chdir(path)
for i in file_path:
grep_keyword(i)
返回结果
好,找到这些文件的话,只能一个个去找对应的文件,去按照过滤出来的链接日期,去增加相应的date属性咯,如下:
title: 部署Prometheus监控k8s集群
tags: 监控 #标签
date: 2021-09-21 22:13:00 # 定义date,以便使用date来作为url的一部分
categories: python # 分类
进阶需求
用了两个月的windows 11,终于不习惯,又换回了windows10,还是由于之前的文章开头没有指定date,导致文章的访问路径又变了,这…换一次系统就换一次访问路径,实属有点不太好,,那就写个代码,把所有的文章中没有指定date的,都加上date,并且指定为文件最后一次修改的日期。
# -*-coding:utf-8-*-
import os
import time
# 博文所在目录
path = r'E:\blogs\blog\source\_posts'
file_path = os.listdir(path)
os.chdir(path)
# 过滤没有添加date属性的文章名称
def grep_keyword(file_name):
linenum = 0
with open(file_name, encoding='utf-8', mode='r') as f1:
for line in f1.readlines():
linenum += 1
if linenum < 10: # 只看前10行即可
if 'date:' in line:
return None
else:
fname = file_name
return fname
# 将过滤后的文件名写入一个列表中
file_list = []
for filename in os.listdir(path):
res = grep_keyword(filename)
if res:
file_list.append(res)
#
for filename in file_list:
# print(filename)
filemt = time.localtime(os.stat(filename).st_mtime)
update_date = time.strftime("%Y-%m-%d", filemt)
insert_text = '---\ndate: ' + update_date + '\n' # 拼接要插入的内容
new_file = filename + '_new'
with open(filename, encoding='utf-8', mode='r') as f1, \
open(new_file, encoding='utf-8', mode='w') as f2:
Text = f1.readlines() # 将文章所有内容读取到一个名为Text的列表中,每一行作为列表中的一个元素
Text[0] = insert_text # 通过索引取值,将第一行的内容“---”替换为上面拼接的字符串:insert_text
newdata = ''.join(Text) # 将修改后的列表重新join为字符串
f2.write(newdata) # 写入一个新文件中
# 删除旧文件,然后将新文件改名为旧文件
os.remove(filename)
os.rename(new_file, filename)