Windows环境GitHub Action读取日文文件名CSV文件报错求解
问题现象
- 待读取目标CSV文件名为日文:
202112_10エリア計.csv - 本地Windows环境下,以下pandas读取代码可正常运行:
pd.read_csv(file_path+'202112_10エリア計.csv')
- 同Windows环境的GitHub Action中运行相同逻辑,抛出文件不存在错误:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\202112_10\u30a8\u30ea\u30a2\u8a08.csv'
- 尝试通过
csv_name = csv_name.decode('utf-8')对文件名做编码处理,触发新错误:
AttributeError: 'str' object has no attribute 'decode'
根因说明
- 手动解码报错原因:Python 3中字符串默认是Unicode类型的
str对象,只有字节类型bytes支持decode()方法,str类型仅支持encode()方法,直接对字符串调用decode()必然触发属性错误。 - 文件找不到的核心原因不是GitHub Action不识别日文字符,而是Git拉取代码阶段默认开启了非ASCII文件名转义配置,导致工作目录内的实际文件名被转义,和代码中硬编码的文件名不匹配,和pandas、Windows系统编码无关。
解决方案
按优先级推荐以下两种可直接落地的方案:
- 方案1:修改GitHub Action的checkout配置,保留原始文件名
找到工作流文件中actions/checkout拉取代码的步骤,添加Git配置关闭非ASCII文件名转义,配置后原有读取代码无需任何修改即可正常运行:- uses: actions/checkout@v4 env: GIT_CONFIG_PARAMETERS: "'core.quotepath=false'" - 方案2:动态匹配文件,避免硬编码日文文件名
如果不希望修改Action配置,可以在读取前遍历目标目录,通过文件名前后缀特征匹配目标文件,从根源上规避文件名转义、编码不一致的问题,示例代码:import os import pandas as pd file_dir = "C:/" # 替换为实际文件存放目录 target_csv = None for filename in os.listdir(file_dir): if filename.startswith("202112_10") and filename.endswith(".csv"): target_csv = os.path.join(file_dir, filename) break if not target_csv: raise FileNotFoundError("未找到匹配的月度统计CSV文件") df = pd.read_csv(target_csv)
注:该场景下不需要手动对文件名做编码/解码转换,所有手动转码的操作都无法解决Git拉取阶段文件名被修改的本质问题。
内容的提问来源于stack exchange,提问作者KowComical
相关产品推荐
相关产品推荐

