Python os.walk生成目录结构遇非ASCII字符报错,修改无效求助
解决os.walk遍历含非ASCII字符文件名时写入文件崩溃的问题
你的代码崩溃的核心原因不是os.walk无法处理Unicode文件名(Python3中os.walk返回的所有路径/文件名都是Unicode字符串),而是打开输出文件时没有指定UTF-8编码。系统默认编码(比如Windows下的GBK)无法识别西里尔文、希腊文这类非ASCII字符,导致写入操作报错。你之前添加的encode/decode操作完全冗余——f本身就是合法的Unicode字符串,来回编码解码不会改变任何内容,自然解决不了问题。
正确修改方案
只需在打开输出文件时显式指定encoding='utf-8',同时可以去掉无用的编码转换步骤:
import os def record_directory_structure(directory_path: str, file_name: str): # 关键:打开文件时指定UTF-8编码,确保支持所有Unicode字符 with open(file_name, "w", encoding='utf-8') as file: for root, dirs, files in os.walk(directory_path): level = root.replace(directory_path, '').count(os.sep) indent = ' ' * 4 * level file.write(f'{indent}{os.path.basename(root)}/\n') subindent = ' ' * 4 * (level + 1) for f in files: file.write(f'{subindent}{f}\n') record_directory_structure("path", "DirectoryStructure.txt")
补充说明
- Python3的
os.walk对Unicode路径和文件名完全兼容,不需要额外处理就能正确识别西里尔文、希腊文等字符 - 显式指定文件编码为UTF-8,是保证非ASCII字符能正确写入文件的核心操作
- 用f-string替代
format方法,代码会更简洁易读
内容的提问来源于stack exchange,提问作者Reinhard Neuwirth
相关产品推荐
相关产品推荐

