【问题标题】:python replace special characterpython替换特殊字符
【发布时间】:2017-04-02 16:16:40
【问题描述】:

我想将文件复制到 windows7 64 位中的新位置。但是我发现文件名中的一些特殊字符在使用shutil.copy2时会导致错误22(但是这个文件在windows GUI中是合法的,可以用鼠标复制)。我相信 error22 意味着无法通过引用此文件名找到源文件。所以我的解决方法是删除或替换任何文件名中的特殊字符,这会在 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 脚本重命名它

【问题讨论】:

标签: python string character encode


【解决方案1】:

所以,看起来您正在创建一个正则表达式来匹配文件名的模式,但您已经知道文件名?

当你说特殊字符时,你是在说空格吗?

为了便于阅读,这是您的代码:

#!/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)

【讨论】:

  • 你有一些语法问题,主要是引号
  • 那个 python 在我的 Mac 上工作。我不确定你的意思?
  • 感谢 Aaron,此示例中的“特殊字符”是导致问题的原始文件名中的 «。还有很多其他的例子,比如文件名d´carogroove - Mosa (Asi Voce Me Mata).krc中的´我事先不知道源文件夹中的文件名称。我忽略了列出源文件夹中所有文件的部分,因为其中没有错误。导致错误的部分是我脚本中的 os.rename(scr,des) 行。我认为特殊字符导致了问题。所以不用担心列表部分。
  • 请注意,问题可能比看起来更难。简单地替换特殊字符是行不通的,或者相当具有挑战性。如果使用特殊字符的黑名单可能会导致此问题,她必须列出所有这些特殊字符。即使找到所有这些字符并使用正则表达式将它们一一替换,它可能不起作用,因为当我列出()这个文件名时,它显示 « as ?在 ide 和控制台中。我正在使用 python 2,也许尝试 3?
  • 您真的需要删除特殊字符还是只是为了解决您的复制问题?
最近更新 更多