Python:在路径中复制带有特殊字符的文件

时间:2010-05-27 07:24:13

标签: python file copy shutil

在Python 2.5中是否有办法在路径中复制具有特殊字符(日语字符,西里尔字母)的文件? shutil.copy无法解决此问题。

这是一些示例代码:

import copy, os,shutil,sys
fname=os.getenv("USERPROFILE")+"\\Desktop\\testfile.txt"
print fname
print "type of fname: "+str(type(fname))
fname0 = unicode(fname,'mbcs')
print fname0
print "type of fname0: "+str(type(fname0))
fname1 = unicodedata.normalize('NFKD', fname0).encode('cp1251','replace')
print fname1
print "type of fname1: "+str(type(fname1))
fname2 = unicode(fname,'mbcs').encode(sys.stdout.encoding)
print fname2
print "type of fname2: "+str(type(fname2))

shutil.copy(fname2,'C:\\')

俄罗斯Windows XP上的输出

C:\Documents and Settings\└фьшэшёЄЁрЄюЁ\Desktop\testfile.txt
type of fname: <type 'str'>
C:\Documents and Settings\Администратор\Desktop\testfile.txt
type of fname0: <type 'unicode'>
C:\Documents and Settings\└фьшэшёЄЁрЄюЁ\Desktop\testfile.txt
type of fname1: <type 'str'>
C:\Documents and Settings\Администратор\Desktop\testfile.txt
type of fname2: <type 'str'>
Traceback (most recent call last):
  File "C:\Test\getuserdir.py", line 23, in <module>
    shutil.copy(fname2,'C:\\')
  File "C:\Python25\lib\shutil.py", line 80, in copy
    copyfile(src, dst)
  File "C:\Python25\lib\shutil.py", line 46, in copyfile
    fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: 'C:\\Documents and Settings\\\x80\
xa4\xac\xa8\xad\xa8\xe1\xe2\xe0\xa0\xe2\xae\xe0\\Desktop\\testfile.txt'

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

作为一种变通方法,你可以os.chdir到unicode命名的目录,这样shutil就不必拥有Unicode参数:(显然,如果你有非ASCII的话,那将无济于事)文件名。)

os.chdir(os.getenv("USERPROFILE")+"\\Desktop\\")
shutil.copy("testfile.txt",'C:\\')

或者,您可以以良好的方式复制文件。

in_file = open(os.getenv("USERPROFILE")+"\\Desktop\\testfile.txt", "rb")
out_file = open("C:\testfile.txt", "wb")
out_file.write(in_file.read())
in_file.close()
out_file.close()

我能想到的第三种解决方法是使用Python 3代替:)

答案 2 :(得分:0)

解决了问题

Windows XP中的桌面路径不是“C:\ Documents and Settings \Администратор\ Desktop”。这是“C:\ Documents and Settings \Администратор\Рабочийстол”。现在两者之间存在映射。

从Windows Vista开始,您可以使用C:\ users \Администратор\ Desktop调用此路径,但在资源管理器中称为“C:\Пользователь\Администратор\Рабочийстол”。