2017-04-02 289 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