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
相关产品推荐
相关产品推荐

