处理多级目录以及多个文件
#!/usr/bin/python
# _*_ coding : utf-8 _*_
# @Time : 2024/1/12 22:21
# @Author :llwen
# @File : checkdata
# @Project : pythonProject
import os
import tarfile
import logging
from datetime import datetime
# 定义常量
TARGET_LIST = ['123456789A']
FIXED_FILE_PATH = "npl/input/data/"
DATE_LIST = ["20230304", "20230405", "20230502"]
OUTPUT_FILE = "npl/input/output.txt"
LOG_FILE = "npl/input/output.log"
# 配置日志记录器
logging.basicConfig(filename=LOG_FILE, level=logging.INFO)
# 遍历日期列表
for date in DATE_LIST:
logging.warning("开始处理日期 %s 文件,当前时间 %s " % (date,datetime.now()))
# 拼接文件路径
file_path = os.path.join(FIXED_FILE_PATH, date)
# 检查文件路径是否存在
if not os.path.exists(file_path):
logging.warning("文件路径 %s 不存在" % file_path)
continue
# 遍历文件路径下的文件
for file_name in os.listdir(file_path):
if file_name.startswith("risk_msg_"):
tar_gz_file = os.path.join(file_path, file_name)
logging.info("正在处理 %s" % tar_gz_file)
# 低版本写法
# tar = tarfile.open((tar_gz_file, "r:gz"))
# 打开tar.gz文件并遍历其中的.dat文件
with tarfile.open(tar_gz_file, "r:gz") as tar:
for member in tar.getmembers():
if member.name.endswith(".dat"):
# 读取.dat文件并查找目标关键字
with tar.extractfile(member) as f:
for line in f:
#if TARGET in line:
if any (target in line for target in TARGET_LIST):
# 将匹配的行写入输出文件
with open(OUTPUT_FILE, "a") as output_file:
output_file.write(line)
logging.warning("处理日期 %s 文件结束,当前时间 %s " % (date,datetime.now()))
# 打印完成日志
logging.info("处理完成")
上述中 line执行报错编码问题可用 line.decode(“latin-1”)