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

AWS Glue作业中无法读取同包文本文件的问题咨询

在AWS Glue作业中读取ZIP包内同目录文本文件的解决方案

问题原因

AWS Glue作业引用ZIP代码包时,包内文件并非以普通文件系统目录形式存在,而是作为ZIP归档内的条目存储。直接使用open()或基于文件系统路径的读取方法会失效,因为路径指向的是ZIP包内的虚拟条目,而非真实系统目录。

解决方法

方法一:使用zipfile模块直接读取ZIP包内文件

通过定位ZIP包路径,直接操作归档文件读取目标文本:

import zipfile
import os

# 获取当前脚本所在的ZIP包完整路径
zip_path = os.path.dirname(os.path.abspath(__file__)).split('.zip')[0] + '.zip'
# 定义ZIP包内目标文件的相对路径(需与打包时的目录结构一致)
internal_file_path = 'src/ingestion/jobs/verifications.txt'

multiline_data = None
with zipfile.ZipFile(zip_path, 'r') as zip_archive:
    with zip_archive.open(internal_file_path) as data_file:
        # 读取字节流并解码为字符串
        multiline_data = data_file.read().decode('utf-8')

self.logger.info(f"Schema is {multiline_data}")

方法二:使用pkgutil模块读取包资源(适合规范Python包结构)

如果代码按Python包结构组织(目录下有__init__.py),可以用pkgutil简化读取逻辑,自动适配本地/ZIP包环境:

import pkgutil

# 替换为脚本所在的Python包路径(如src.ingestion.jobs)
target_package = 'src.ingestion.jobs'
file_name = 'verifications.txt'

# 读取包内资源并解码为字符串
multiline_data = pkgutil.get_data(target_package, file_name).decode('utf-8')
self.logger.info(f"Schema is {multiline_data}")

注意事项

  • 打包ZIP时需确保verifications.txt被正确包含在对应目录层级下,无遗漏
  • 核对ZIP包内的目录结构,确保代码中指定的内部路径与实际打包结构一致

内容的提问来源于stack exchange,提问作者RushHour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:13:22