该程序假设将硬盘驱动器上的所有文件写入文件。当我在空闲状态下运行它运行直到它遇到一个特定的文件,然后给我一个错误:UnicodeEncodeError:'charmap'编解码器不能编码位置143的字符'\ u2122':字符映射到< undefined>
#! python3
import os
nfile=open('c:\\users\\computer 6\\desktop\\HardDrive.txt','w')
for folder,subfolder,files in os.walk('c:\\'):
if len(files) != 0:
for i in range(len(files)):
nfile.write(os.path.join(folder,files[i])+'\n')
else:
continue
nfile.close()
print('Log complete.')
我猜这是因为该文件包含西班牙语字母?
答案 0 :(得分:1)
指定支持所有Unicode字符的编码。 open
默认为locale.getpreferredencoding()
。 \u2122
是商标符号,默认编码不支持:
#! python3
import os
with open('c:\\users\\computer 6\\desktop\\HardDrive.txt','w',encoding='utf8') as nfile:
for folder,subfolders,files in os.walk('c:\\'):
for file in files:
nfile.write(os.path.join(folder,file) + '\n')
print('Log complete.')
答案 1 :(得分:-2)
编辑:我看到我在问题和答案中错过了一些观点 确实不对。所以请忘记以下内容(我不会删除它 只有在"历史"目的)。
你最可能是对的。与法语字符有同样的问题,这样解决了:
for f in next(os.walk(full_path))[2]:
##
# @todo The following line is a hack to avoid encoding errors,
# it would be better to find a way to avoid doing this
# encoding/decoding on each file.
f = f.encode('utf-8', 'replace').decode()
file_name, extension = os.path.splitext(f)
etc.