2017-04-02 220 views
0

我想将文件复制到Windows7 64位的新位置。但是在使用shutil.copy2时,我发现文件名中的一些特殊字符会导致错误22(但是这个文件在Windows GUI中是合法的,并且可以用鼠标进行复制)。我相信error22意味着通过引用此文件名无法找到源文件。所以我的解决方法是删除或替换任何文件名中的特殊字符,这会导致windows7 64bit中出现此问题。一般情况下,用户不断将文件从其他文件夹复制到此文件夹,因此文件名必须由一些可变参数而不是常量处理。但作为一个例子,我只是在示例代码中放置了两个文件名。我把图片中显示的代码:python替换特殊字符

# -*- coding: gbk*- 
#!/usr/bin/python 
#Filename:ae.py 
import os,shutil,time,re,string,sys #re is regular expression 
from nt import chdir 
import win32api,win32file 
import unicodedata,codecs 
scr=r"C:\Users\Administrator\Desktop\« How-To Geek Forums.pdf" 
des="C:\\Users\\Administrator\\Desktop\\How-To Geek Forums.pdf" 
#chdir(os.path.dirname(scr)) 
os.rename(scr,des) 

和我

WindowsError:[Error 123] 

我认为,这意味着使用Python脚本我甚至无法对其进行重命名,一旦有像«

一些特殊字符
+0

感谢kmario23,我有困难时期编辑以改善fomat –

+0

这个问题是关于在另一个问题中提出的原始问题的解决方法[link](http://stackoverflow.com/questions/42 804167 /复制文件与 - 奇怪的名字 - 在 - python的 - 有错误-22)。所以,如果可以解决这个问题,这个问题不存在这个目的 –

+0

可能重复的[从字符串中删除所有特殊字符,标点符号和空格](http://stackoverflow.com/questions/5843518/remove-all-special- characters-punctuation-and-spaces-from-string) – wwii

回答

0

因此,它看起来像你正在创建一个正则表达式来匹配文件名的模式,但你已经知道这个名字?

当你说特殊字符时,你是否专门谈论空白?

这是你的可读性代码:

#!/usr/bin/python 
#Filename:ae.py 
import os,shutil,time,re,string,sys 
#re is regular expression 
from nt import chdir import win32api,win32file 
import unicodedata,codecs 
scr=r"C:\Users\Administrator\Desktop\« How-To Geek Forums.pdf" 
des="C:\Users\Administrator\Desktop\How-To Geek Forums.pdf" # 
chdir(os.path.dirname(scr)) os.rename(scr,des) 

退房http://docs.python.org/library/os.html#os.listdir

我可能只是得到目录中的文件列表与

chdir(os.path.dirname(scr) 
files = os.listdir(“.”) 
for name in files: 
    os.rename(name,des+”/“+name) 
+0

你有一些语法问题,主要是引用 – abccd

+0

这个python在我的Mac上运行。我不确定你是什么意思? –

+0

引号是“not” – abccd