2011-08-13 58 views
2

我試圖複製一個文件,括號替換爲自己的正則表達式

>>> originalFile = '/Users/alvinspivey/Documents/workspace/Image_PCA/spectra_text/HIS/jean paul test 1 - Copy (2)/bean-1-aa.txt' 
>>> copyFile = os.system('cp '+originalFile+' '+NewTmpFile) 

但必須先更換open函數之前的空間和括號將工作:

/用戶/ alvinspivey /文檔/ workspace/Image_PCA/spectra_text/HIS/jean \ paul \ test \ 1 \ - \ Copy \\(2 \)/ bean-1-aa.txt

spaces'' - >''' 括號' (' - >'\('等)

更換空間工作:

>>> originalFile = re.sub(r'\s',r'\ ', os.path.join(root,file)) 

但括號返回一個錯誤:

>>> originalFile = re.sub(r'(',r'\(', originalFile) 

回溯(最近通話最後一個): 文件 「」,1號線,在 文件「/庫/框架/ Python.framework /版本/ 2.7/lib/python2.7/re.py「,第151行,在子 返回_compile(模式,標誌).sub(複製,字符串,計數) 文件」/ Library/Frameworks /Python.framework/Versions/2.7/lib/python2.7/re.py「,第244行,在_compile 引發錯誤,v#無效表達式 sre_constants.error:不平衡括號

我是否正確地替換括號?

此外,當使用re.escape()爲此時,文件不能正確返回。所以它不是一個選擇。

+0

編輯補充「蟒蛇「 標籤。 –

+2

您可以使用[shutil.copy](http://docs.python.org/library/shutil.html)(copy2或copyfile)而不是system cp命令,從而避免需要在第一個位置轉義路徑地點。 – Marty

回答

2

(在正則表達式(分組)特殊的意義,你要逃避它:

originalFile = re.sub(r'\(',r'\(', originalFile) 

,或者因爲你不使用正則表達式功能,用於替換:

originalFile = re.sub(r'\(','\(', originalFile) 
+0

這正是我正在尋找的! – Alvin

2

的正則表達式r'('被翻譯爲開始捕獲組。這就是爲什麼Python抱怨。

如果你正在做的是替換空格和括號,那麼也許只是string.replace會做?

+0

對於string.replace()爲+1。 「做最簡單的事情可能會奏效」。 –

+0

謝謝,字符串。替換效果很好,我現在將我的編程風格切換到使用它。 – Alvin

0
  1. 使用shutil.copy來複制文件,而不是調用系統。
  2. 使用子進程而不是os.system - 它避免調用shell,所以不需要引用。
+0

謝謝@mwalsh和Douglas,shutil.copy很好。但是,只能在一條線上解決問題。不過謝謝。 – Alvin

+0

這就是你需要子進程的地方。 –

2

另外,如果你避免調用一個shell(使用os.system)做拷貝,你不必擔心逃避空格和其他特殊字符,

import shutil 

originalFile = '/Users/alvinspivey/Documents/workspace/Image_PCA/spectra_text/HIS/jean paul test 1 - Copy (2)/bean-1-aa.txt' 
newTmpFile = '/whatever.txt' 
shutil.copy(originalFile, newTmpFile)