0

0

如何从PSA文件中提取特定行的指定列并自动提取门店编号生成CSV

霞舞

霞舞

发布时间:2026-01-31 10:30:11

|

702人浏览过

|

来源于php中文网

原创

如何从PSA文件中提取特定行的指定列并自动提取门店编号生成CSV

本文介绍如何使用pandas直接读取psa文本文件,精准筛选以“prod”开头的行、提取第3列数值,并从文件名中正则提取门店号,一步生成结构化csv,无需中间临时文件。

在处理批量工业或业务日志类文件(如 .psa)时,常见需求是:仅解析特定标识行(如 prod)、提取固定位置字段(如第3个逗号分隔值),并关联元信息(如文件名中的门店编号)。传统做法常依赖先写入临时文本再读取,不仅低效,还易引入编码、换行或格式错误。以下提供简洁、健壮、可批量扩展的专业方案。

✅ 核心思路

  • 跳过临时文件:pd.read_csv() 支持直接读取原始文件,通过 usecols 指定列索引(0-based),header=None 避免误判首行标题;
  • 精准过滤:加载后用布尔索引 df['type'] == 'prod' 筛选目标行,再 drop('type') 移除冗余列;
  • 智能提取门店号:利用 re.search(r'store\s+(\d+)', filename) 安全捕获连续数字,兼容 store 15、store_15 等变体;
  • 动态列注入:使用 .assign(store=store) 原地添加新列,语义清晰且链式友好。

? 完整可运行代码(支持单文件 & 批量处理)

import pandas as pd
import re
import os
from pathlib import Path

def process_psa_file(filepath: str, output_dir: str = "."):
    """处理单个PSA文件:提取prod行第3列 + 文件名中的store编号"""
    # 1. 读取:仅加载第1列(索引0)和第3列(索引2),无表头
    df = pd.read_csv(
        filepath,
        usecols=[0, 2],
        header=None,
        names=['type', 'num'],
        skip_blank_lines=True,
        on_bad_lines='skip'  # 自动跳过格式异常行(如空行、列数不足)
    )

    # 2. 过滤 + 清洗:只保留 type=='prod' 的行,并移除 type 列
    df = df[df['type'] == 'prod'].drop(columns='type').reset_index(drop=True)

    # 3. 提取 store 编号(推荐:更鲁棒的正则)
    filename = Path(filepath).stem
    store_match = re.search(r'(?:store|STORE)[\s_-]*(\d+)', filename)
    store_num = store_match.group(1) if store_match else "unknown"

    # 4. 添加 store 列并导出
    df = df.assign(store=store_num)
    output_path = Path(output_dir) / f"{Path(filepath).stem}_output.csv"
    df.to_csv(output_path, index=False)
    print(f"✅ 已保存: {output_path} (共 {len(df)} 条记录)")

# ? 批量处理 ZIP 内所有 .psa 文件(需先解压)
psa_folder = "path/to/your/psa_files"  # 替换为实际路径
for psa_file in Path(psa_folder).glob("*.psa"):
    process_psa_file(psa_file, output_dir="output_csv")

# ? 若需直接处理 ZIP(不解压),可结合 zipfile 模块:
# import zipfile
# with zipfile.ZipFile("data.zip") as z:
#     for name in z.namelist():
#         if name.endswith(".psa"):
#             with z.open(name) as f:
#                 # 注意:pd.read_csv 不直接支持 zip file object,需 BytesIO 转换
#                 # 此处略去,详见 pandas 文档关于 buffer 的说明

⚠️ 关键注意事项

  • 列索引务必从0开始计数:usecols=[0,2] 对应第1列(prod/pla)和第3列(目标数值),而非 [1,3];
  • 正则容错设计:(?:store|STORE) 匹配大小写,[\s_-]* 兼容空格、下划线、短横线分隔,避免因命名不规范导致提取失败;
  • 异常处理必备:on_bad_lines='skip' 和 skip_blank_lines=True 防止文件末尾空行或损坏行中断流程;
  • 批量命名安全:使用 Path(filepath).stem 获取无后缀文件名,避免 os.path.split() 的平台差异风险。

✅ 输出效果示例

输入文件 1 Area 2 - store 15 group.psa 处理后生成:

通义视频
通义视频

通义万相AI视频生成工具

下载
num,store
456,15
789,15

完全匹配预期表格结构,且天然支持多文件并行处理——只需修改 psa_folder 路径,即可一键处理整个门店数据集。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

70

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

0

2026.01.31

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

35

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

20

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Rust 教程
Rust 教程

共28课时 | 5.1万人学习

Git 教程
Git 教程

共21课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号