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 関数が機能する前に、最初にスペースと括弧を置き換える必要があります。

/Users/alvinspivey/Documents/workspace/Image_PCA/spectra_text/HIS/jean\ paul\ test\ 1\ -\ Copy\ \(2\)/bean-1-aa.txt

スペース ' ' --> '\ ' 括弧 '(' --> '\(' など

スペースの作業を置き換える:

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

しかし、括弧はエラーを返します:

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

トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、ファイル "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py"、151 行、sub return _compile( pattern, flags).sub(repl, string, count) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 244, in _compile raise error, v # invalid式 sre_constants.error: 括弧のバランスが取れていません

括弧を正しく置き換えていますか?

また、これに re.escape() を使用すると、ファイルが正しく返されません。したがって、代替手段ではありません。

4

4 に答える 4

2

あるいは、コピーを行うためにシェル (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)
于 2011-08-13T23:14:44.233 に答える
2

(は正規表現 (グループ化) で特別な意味を持つため、エスケープする必要があります。

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

または、置換に正規表現機能を使用しないため:

originalFile = re.sub(r'\(','\(', originalFile)
于 2011-08-13T22:54:43.203 に答える
2

正規表現r'('は、キャプチャ グループの開始として変換されます。これが、Pythonが不平を言っている理由です。

スペースと括弧を置き換えるだけなら、おそらくstring.replaceで十分でしょうか?

于 2011-08-13T22:57:28.353 に答える
0
  1. システムを呼び出すのではなく、shutil.copy を使用してファイルをコピーします。
  2. os.system ではなく subprocess を使用してください。シェルへの呼び出しが回避されるため、引用符は必要ありません。
于 2011-08-13T23:07:42.223 に答える