使用pyx12库读取X12文件报错invalid mode: 'U',求解决方案
解决pyx12解析X12文件时"invalid mode: 'U'"的错误
问题根源
Python 3已移除废弃的文件打开模式'U'(通用换行模式),而旧版本pyx12的X12Reader默认使用该模式打开文件,导致报错。
解决方案
方案1:手动打开文件后传入文件对象
绕开X12Reader内部的文件打开逻辑,自己用Python 3兼容的模式打开文件,再将文件对象传给X12Reader:
修改后的代码:
import pyx12.x12file import os src_file = source_file_name try: if not os.path.isfile(src_file): print('Could not open file "%s"' % (src_file)) exit() # 补充括号执行退出操作 # 用Python3兼容的'r'模式打开文件,替代X12Reader内部的打开逻辑 with open(src_file, 'r') as f: src = pyx12.x12file.X12Reader(f) for seg in src: if seg.get_seg_id() == 'ST': print(seg) print(seg.get_value('ST03')) except pyx12.errors.X12Error: print('"%s" does not look like an X12 data file' % (src_file)) except Exception as E: print(E)
方案2:升级pyx12到最新版本
如果项目允许,直接升级pyx12库,新版本大概率已修复模式'U'的兼容性问题:
pip install --upgrade pyx12
补充说明
X12Reader的构造函数支持直接接收已打开的文件对象,因此方案1无需修改库源码即可解决问题。原代码中的exit未加括号,仅为函数引用,不会实际执行退出操作,已在修改后的代码中修正。
内容的提问来源于stack exchange,提问作者Codebull
相关产品推荐
相关产品推荐

