【发布时间】:2017-03-29 09:51:05
【问题描述】:
我正在尝试重命名名称中包含非 unicode 字符的文件。
import os
dir = b'/tr2'
for file_name in os.listdir(dir):
file_name = file_name.decode('utf8','replace')
print(file_name)
os.rename(file_name,'11.txt')
只能打印这个名字,但是当我尝试重命名时,我得到了错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 11: ordinal not in range(128)
【问题讨论】:
-
这发生在哪一行?在
print(file_name)上(尝试将unicode 数据打印到无法处理unicode 的终端)或os.rename(file_name, '11.txt')?请始终包含 full 堆栈跟踪。此外,您实际上不需要解码二进制文件名,如果您将其传递给os.rename,它应该可以工作,正如os.listdir返回的那样 -
在
os.rename(file_name,'11.txt') UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 11:序数不在范围内(128)。当我删除 file_name = file_name.decode('utf8','replace') 时,出现错误 - FileNotFoundError: [Errno 2] No such file or directory: b'01 Contrase\xc3\xb1as.txt' -> '11 .txt' -
os.rename()相对于当前目录起作用,os.listdir()返回的文件是相对于给定路径(dir = b'/tr2')的,这就是你得到 FileNotFoundError 的原因。尝试os.rename(os.path.join(dir, file_name), os.path.join(dir, b'11.txt'))而不解码 file_name。
标签: python-3.x encoding character-encoding