python替换特殊字符
我想将文件复制到windows7 64位中的新位置。但是我发现在使用shutil.copy2时,文件名中的一些特殊字符会导致错误22(但是这个文件在windows GUI中是合法的,可以用鼠标复制)。我相信错误22意味着引用此文件名无法找到源文件。因此,我的解决方法是删除或替换导致windows7 64位出现此问题的任何文件名中的特殊字符。通常,用户会将文件从其他文件夹复制到此文件夹,因此文件名必须由一些变量而不是常量处理。但是作为一个例子,我只是在示例代码中放了两个文件名。我把代码放在图中:python替换特殊字符,python,string,character,encode,Python,String,Character,Encode,我想将文件复制到windows7 64位中的新位置。但是我发现在使用shutil.copy2时,文件名中的一些特殊字符会导致错误22(但是这个文件在windows GUI中是合法的,可以用鼠标复制)。我相信错误22意味着引用此文件名无法找到源文件。因此,我的解决方法是删除或替换导致windows7 64位出现此问题的任何文件名中的特殊字符。通常,用户会将文件从其他文件夹复制到此文件夹,因此文件名必须由一些变量而不是常量处理。但是作为一个例子,我只是在示例代码中放了两个文件名。我把代码放在图中:
# -*- 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脚本重命名它。因此,看起来您正在创建一个正则表达式来匹配文件名的模式,但您已经知道名称了吗 当你说特殊字符的时候,你是专门说空格吗 以下是您的可读性代码:
#!/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)
退房
我可能只会得到目录中的文件列表
chdir(os.path.dirname(scr)
files = os.listdir(“.”)
for name in files:
os.rename(name,des+”/“+name)
感谢kmario23,我花了很长时间编辑以改进Fomatt。这个问题是关于另一个问题中原始问题的解决方法。如果可以解决的话,这个问题就不存在了。你可能有一些语法问题,主要是python在我的Mac上的引用。我不知道你的意思是什么?谢谢Aaron,本例中的“特殊字符”在原始文件名中是«引起问题的。还有很多其他的例子,比如文件名d'caro groove-Mosa(asivoce Me Mata)中的‘’。krc我事先不知道源文件夹中的文件名。我忽略了列出源文件夹中所有文件的部分,因为其中没有错误。导致错误的部分是我脚本中的os.rename(scr,des)行。我认为是这个特殊的角色造成了这个问题。因此,不要担心列表部分。请注意,问题可能比看起来更难。简单地替换特殊角色是不起作用的,或者是相当有挑战性的。若一个人使用黑名单上的特殊字符可能会导致这个问题,她必须列出所有这些特殊字符。例如,即使找到所有这些字符并使用正则表达式逐个替换它们,它也可能不起作用,因为当我列出()这个文件名时,它会显示«as»?在ide和控制台中。我使用的是Python2,也许试试3?您真的需要去掉特殊字符吗?还是只是为了解决复制问题而这样做?