我看过很多关于unicode,utf-8的论坛,但是无法做到这一点。
我正在使用Windows
。
我们有两个文件夹:
E:\old
---- திருக்குறள்.txt
---- many more unicode named files
E:\new
----
语言:泰米尔语
假设我想将文件移动到E:\ new。我无法正确访问unicode文件名。
我尝试过什么
import sys
import os
from shutil import copyfile
path = 'E:/old/'
for root, _, files in os.walk(ur''.join(path)):
files = [f for f in files]
copyfile(files[0].encode('utf-8').strip(),'E:/new/') //just for example
错误:
Traceback (most recent call last):
File "new.py", line 8, in <module>
copyfile(files[0].encode('utf-8').strip(),'E:/new/')
File "C:\Python27\lib\shutil.py", line 82, in copyfile
with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: '\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xb0\xe0\xaf\x81\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb1\xe0\xae\xb3\xe0\xaf\x8d.txt'
答案 0 :(得分:2)
在Windows中使用Unicode路径。由于您使用的是os.walk(),因此您需要正确处理路径到子目录,但您可以使用shutil.copytree
代替。如果您不需要子目录,请使用os.listdir
。
这是适用于os.walk
的内容:
import os
import shutil
for path,dirs,files in os.walk(u'old'):
for filename in files:
# build the source path
src = os.path.join(path,filename)
# build the destination path relative to the source path
dst = os.path.join('new',os.path.relpath(src,'old'))
try:
# ensure the destination directories and subdirectories exist.
os.makedirs(os.path.dirname(dst))
except FileExistsError:
pass
shutil.copyfile(src,dst)