关于Python脚本在大量数据中定位抽数

处理多级目录以及多个文件

#!/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”)

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值