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

Windows环境GitHub Action重命名日文文件名报找不到文件错误求解

问题诱因
  • 核心错误是多余的文件名转码操作:Python 3 中os.listdir()在Windows环境下会直接返回和系统文件API匹配的Unicode格式文件名字符串,不需要额外做编码转换。代码中对拿到的文件名执行filename.encode('utf-8').decode(locale.getpreferredencoding(False))属于错误转码,会导致字符串实际内容和磁盘存储的文件名不匹配。
  • 日志中print能正常显示日文文件名,是因为日志输出流的编码刚好适配转码后的字符串,属于肉眼可见的匹配,不代表字符串能被系统文件API正确识别。
  • 最开始直接用硬编码日文路径调用pd.read_csv()失败,也是同样的原因:脚本中硬编码的UTF-8格式日文字符串,和Windows runner默认非UTF-8区域设置下的文件系统文件名编码不匹配,导致路径查找失败。
  • 额外注意:贴出的重命名代码中os.rename()调用缺少一个闭合右括号,如果实际运行代码存在该问题会先触发语法错误,当前抛出文件找不到错误说明该问题是粘贴代码时的笔误。
可行解决方案
  • 移除所有手动文件名转码逻辑,直接使用os.listdir()返回的原始文件名做路径拼接,Python的os模块会自动完成和Windows系统API的路径适配,不需要手动处理编码。
  • 优先采用遍历匹配后直接读取的方案,不需要重命名文件,避免额外操作风险,参考代码:
import os
import pandas as pd

download_path = "C:\\"
df = None

for filename in os.listdir(download_path):
    if filename.startswith("202204"):
        file_path = os.path.join(download_path, filename)
        # 注意如果csv内容本身是日文编码,需要指定encoding参数,比如shift-jis/cp932/utf-8
        df = pd.read_csv(file_path, encoding="utf-8")
        break
  • 如果确实需要重命名文件,修正后的重命名逻辑如下:
import os

download_path = "C:\\"

for filename in os.listdir(download_path):
    if filename.startswith("202204"):
        old_path = os.path.join(download_path, filename)
        new_path = os.path.join(download_path, "202204.csv")
        os.rename(old_path, new_path)
        print(f"file renamed to {new_path}")
        break
  • 若上述方案仍存在编码兼容问题,可在GitHub Action的Windows环境步骤中提前执行PowerShell命令开启全局UTF-8支持,再运行Python脚本:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage" -Name "ACP" -Value "65001"
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage" -Name "OEMCP" -Value "65001"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:01:12