You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Python提取.egp文件中SAS脚本不全及其他读取.egp文件方法的咨询

关于Python提取.egp文件中SAS脚本不全及其他读取.egp文件方法的咨询

问题1:为什么只提取出第一个SAS脚本?

仔细看了你的代码,问题出在文件名覆盖上!

EGP本质是个ZIP归档包,里面的SAS脚本可能存放在不同的子目录里,比如归档内可能同时存在core/extract_data.sas和utils/extract_data.sas这类文件——它们的基础文件名都是extract_data.sas。你的代码用os.path.basename(file_info.filename)生成提取后的文件名,这就导致后面提取的同名文件会直接覆盖之前的,最终_extracted文件夹里看起来只剩“第一个”,但实际上是最后一个覆盖了前面所有同名文件的结果。

修复方案:

有两种简单的解决思路,选哪种看你的实际需求:

思路1:保留归档内的目录结构(推荐)

这样能完全还原EGP里的脚本组织逻辑,还从根源上避免重名覆盖问题:

# 替换原来生成extracted_path的代码
extracted_path = os.path.join(extraction_dir, file_info.filename)
# 自动创建所需的子目录,避免写入文件时报错
os.makedirs(os.path.dirname(extracted_path), exist_ok=True)

思路2:给重名文件自动加序号

如果你不想保留子目录,只想把所有脚本放在同一文件夹下,可以给重复的文件名加递增序号:

base_name = os.path.basename(file_info.filename)
name, ext = os.path.splitext(base_name)
extracted_path = os.path.join(extraction_dir, base_name)
# 检查文件是否存在,重复就追加序号
counter = 1
while os.path.exists(extracted_path):
    extracted_path = os.path.join(extraction_dir, f"{name}_{counter}{ext}")
    counter += 1

问题2:其他读取EGP文件的方法?

EGP本身就是标准ZIP文件,用zipfile处理是最轻量化、跨平台的方案,我再给你补充几个实用的思路:

  1. 无需提取到本地文件:如果你的需求只是读取脚本内容做分析(比如扫描关键字、统计代码行数),完全不用生成_extracted文件夹,直接在内存里读取内容就行,能大幅提升处理速度,还能节省磁盘空间:
    def extract_sas_scripts_from_egp_no_disk(file_path):
        scripts = []
        with zipfile.ZipFile(file_path, 'r') as archive:
            for file_info in archive.infolist():
                if file_info.filename.endswith(".sas"):
                    with archive.open(file_info) as sas_file:
                        content = sas_file.read().decode('latin-1')
                        scripts.append((content, file_info.filename))
        return scripts
    
  2. SAS官方工具调用(限有EG环境的情况):如果你本地安装了SAS Enterprise Guide,可以通过SAS的COM自动化接口调用EG导出所有脚本,但这个方法依赖Windows系统和EG安装环境,通用性远不如zipfile方案。
  3. 批量处理优化:如果要处理成百上千个EGP文件,建议不要每个文件都生成单独的_extracted文件夹,可以统一用一个临时目录,处理完单个文件就清理,避免磁盘空间被大量临时文件占用。

备注:内容来源于stack exchange,提问作者Freddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:00:31