Python 3 os.walk()遇含特殊字符路径失效,求解决方案
解决os.walk()无法遍历含特殊字符路径的问题
os.walk()本身支持带特殊字符(比如Ração这类含重音的字符)的路径,你遇到的无输出问题大概率是路径编码处理不当导致的,以下是几个可行的解决方法:
确保路径为正确的Unicode字符串
在Python 3中,字符串默认采用Unicode编码,直接硬编码路径即可,比如:import os target_path = "/home/user/文档/Ração" for root, dirs, files in os.walk(target_path): print(root) # 打印遍历到的目录如果是Python 2环境,需要给字符串加上
u前缀声明为Unicode:u"/home/user/文档/Ração"。检查路径是否真实存在
先确认你传入的路径确实存在,避免因路径拼写错误导致os.walk()无迭代:import os target_path = "/home/user/文档/Ração" if not os.path.isdir(target_path): print("目标路径不存在或不是目录") else: for root, dirs, files in os.walk(target_path): print(root)改用pathlib模块(推荐)
Python 3.4+自带的pathlib模块对特殊字符路径的支持更友好,语法也更简洁直观,完全可以替代os.walk()实现目录遍历:from pathlib import Path root_dir = Path("/home/user/文档/Ração") # 遍历所有子目录 for sub_dir in root_dir.rglob("*"): if sub_dir.is_dir(): print(sub_dir)验证文件系统编码
极少数情况下,系统文件系统的编码与Python默认编码不匹配会导致路径解析失败,可以通过以下代码查看当前系统的文件系统编码:import sys print(sys.getfilesystemencoding())如果输出不是
utf-8,可以尝试将路径转码为该编码后再传入os.walk()(Python 3中一般无需手动处理,系统会自动适配)。
内容的提问来源于stack exchange,提问作者pbriquet
相关产品推荐
相关产品推荐

