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

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")

补充说明

  1. Python3的os.walk对Unicode路径和文件名完全兼容,不需要额外处理就能正确识别西里尔文、希腊文等字符
  2. 显式指定文件编码为UTF-8,是保证非ASCII字符能正确写入文件的核心操作
  3. 用f-string替代format方法,代码会更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:42:33