0

0

如何从PSA文件中提取指定行的特定列并关联文件名信息

聖光之護

聖光之護

发布时间:2026-01-31 10:41:01

|

574人浏览过

|

来源于php中文网

原创

如何从PSA文件中提取指定行的特定列并关联文件名信息

本文介绍如何使用pandas直接读取psa文本文件,精准筛选以“prod”开头的行、提取第3列(索引为2)数值,并自动解析文件名中的门店编号,最终生成结构清晰的csv表格,全程无需中间临时文件。

在处理批量PSA格式日志或报表文件时,常见需求是:仅提取含特定标识(如prod)的行中某固定位置的字段(如第3个逗号分隔值),同时将文件名中隐含的关键信息(如门店编号)作为辅助列一并写入结果。传统做法常依赖先转存为TXT/CSV再二次处理,不仅冗余,还易引入编码、换行或列对齐问题。

以下为高效、健壮的解决方案,完全基于Pandas原生IO能力,跳过临时文件环节:

Transor
Transor

专业的AI翻译工具,支持网页、字幕、PDF、图片实时翻译

下载

✅ 核心步骤说明

  1. 直接读取原始PSA文件:用 pd.read_csv() 指定 usecols=[0, 2] 仅加载第1列(类型标识)和第3列(目标数值),避免读入全部30+列,提升性能;
  2. 赋予临时列名:通过 names=['type', 'num'] 明确语义,便于后续逻辑操作;
  3. 条件过滤与列清理:df[df['type'] == 'prod'] 筛选目标行,.drop(columns='type') 移除冗余标识列;
  4. 动态注入文件元数据:利用正则 re.search(r'store\s+(\d+)', fname) 从文件名中安全提取数字编号(支持 store 15、store_15 等常见变体);
  5. 合并结果并导出:.assign(store=store) 新增门店列,to_csv() 一键输出标准CSV。

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

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

def process_psa_file(filepath: str) -> pd.DataFrame:
    """处理单个PSA文件:提取prod行第3列 + 解析门店号"""
    # 仅读取第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'  # 自动跳过格式异常行(如空行、列数不足)
    )

    # 过滤以 'prod' 开头的行,并移除type列
    df_filtered = df[df['type'] == 'prod'].drop(columns='type').copy()

    # 从文件名提取store编号(兼容多种命名格式)
    filename = Path(filepath).stem
    store_match = re.search(r'(?:store|STORE)\s*(\d+)|(\d+)\s*(?:store|STORE)', filename)
    store_num = store_match.group(1) if store_match and store_match.group(1) else \
                store_match.group(2) if store_match else "UNKNOWN"

    # 添加store列并返回
    return df_filtered.assign(store=store_num)

# --- 批量处理示例(遍历ZIP解压后的文件夹)---
psa_folder = Path("path/to/your/psa_files")  # 替换为实际路径
output_csv = "all_stores_output.csv"

all_dfs = []
for psa_file in psa_folder.glob("*.psa"):
    try:
        df = process_psa_file(psa_file)
        all_dfs.append(df)
        print(f"✓ 已处理: {psa_file.name} → 提取 {len(df)} 条 prod 数据")
    except Exception as e:
        print(f"✗ 处理失败 {psa_file.name}: {e}")

if all_dfs:
    final_df = pd.concat(all_dfs, ignore_index=True)
    final_df.to_csv(output_csv, index=False)
    print(f"\n✅ 合并完成!总计 {len(final_df)} 行,已保存至 {output_csv}")
else:
    print("⚠️ 未找到有效PSA文件或全部处理失败")

⚠️ 关键注意事项

  • 索引理解:usecols=[0, 2] 对应第1列(索引0)和第3列(索引2),因Python索引从0开始,切勿误用 [2](会报错);
  • 文件名鲁棒性正则表达式已覆盖 store 15、STORE_15、15_store 等常见格式,若命名规则特殊,可按需调整 re.search() 模式;
  • 错误容错:on_bad_lines='skip' 和 skip_blank_lines=True 可避免因文件末尾空行或损坏行导致中断;
  • 编码问题:若PSA文件非UTF-8(如GBK),在 read_csv() 中添加 encoding='gbk' 参数;
  • 内存优化:对超大文件,可改用 chunksize 分块处理,但本场景通常无需。

该方案兼具简洁性、可维护性与生产就绪性,一次编写即可稳定支撑千级PSA文件的自动化清洗任务。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

515

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

251

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

749

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

215

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

236

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

533

2023.12.06

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

热门下载

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

精品课程

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

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

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

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