如何在python中读取unicode文件名?

时间:2017-05-03 15:05:27

标签: python windows unicode

我看过很多关于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'

1 个答案:

答案 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)