Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python替换特殊字符_Python_String_Character_Encode - Fatal编程技术网

python替换特殊字符

python替换特殊字符,python,string,character,encode,Python,String,Character,Encode,我想将文件复制到windows7 64位中的新位置。但是我发现在使用shutil.copy2时,文件名中的一些特殊字符会导致错误22(但是这个文件在windows GUI中是合法的,可以用鼠标复制)。我相信错误22意味着引用此文件名无法找到源文件。因此,我的解决方法是删除或替换导致windows7 64位出现此问题的任何文件名中的特殊字符。通常,用户会将文件从其他文件夹复制到此文件夹,因此文件名必须由一些变量而不是常量处理。但是作为一个例子,我只是在示例代码中放了两个文件名。我把代码放在图中:

我想将文件复制到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?您真的需要去掉特殊字符吗?还是只是为了解决复制问题而这样做?