2016-11-11 29 views
-1

私は、os.rename()について疑問に思っています。はファイルが存在すると言っていますが、os.rename()には見つかりません。ここでは、コードスニペットです:Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05 Neuruppin\12-05 - 0 2.JPGという名前のファイルにこれを実行するWindows 10のPython:os.rename()はos.path.exists()が見つけたファイルを見つけることができません。

 try: 
      if (os.path.exists(sourcePath)): 
       print('Safe: %s does exist!' % sourcePath) 
      os.rename (sourcePath, newPath) 
     except Exception as e: 
      print('Error renaming "%s":' % sourcePath) 
      raise e 

は、次のような出力が得られた:

Safe: Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05 Neuruppin\12-05 - 0 2.JPG does exist! 
Error renaming "Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05 Neuruppin\12-05 - 0 2.JPG": 
Traceback (most recent call last): 
: 
WindowsError: [Error 3] Das System kann den angegebenen Pfad nicht finden 

(ドイツ語版のWindows:「指定されたパスが見つかりません。」)私がしてきましたこのスニペットを問題なく使用していますが、おそらくファイル名に空白が含まれていることはありません...しかし、スペースをアンダースコアに置き換えると、ファイル名はまだ見つかりません。

何か間違っている必要がありますが、何ですか?

EDIT:/../コンポーネントを削除すると(その周囲にos.normpath()をラップしても)役立ちません。

+0

あなたは '\画像を削除するとどうなりますか\ ..'パスから? – Kevin

+0

ループ内の複数のファイルでこれをやっていますか? 'os.rename'を' if'の中に置いて、パスが存在しなければ実行しないのはどうですか?それはまだ実行しようとしていますか? – BrenBarn

+0

@BrenBarnですが、私は 'ERROR_PATH_NOT_FOUND'(3)が悪いパスに対してこのコンテキスト(すなわち' MoveFileEx'を呼び出す)でのみ発生するべきであると思っています。ソースファイルが見つからない場合、エラーは 'ERROR_FILE_NOT_FOUND'(2)でなければならず、ターゲット名がすでに存在する場合、エラーは' ERROR_ALREADY_EXISTS'(183)でなければなりません。 – eryksun

答えて

0

ありがとうSkycc、あなたは大丈夫です:エラーは、新しいパス名のディレクトリが存在しなかったために発生しました。愚かな私。

この1作品 - os.makedirs()は一度だけ呼ばれていることを確認します

 try: 
      if (os.path.exists(sourcePath)): 
       print('Safe: %s does exist!' % sourcePath) 
      (head, tail) = os.path.split(newPath) # @UnusedVariable 
      if (not os.path.exists(head)): 
       os.makedirs(head) 
      os.rename(sourcePath, newPath) 
     except Exception as e: 
      print('Error renaming "%s" to "%s":' % (sourcePath, newPath)) 
      raise e 
+0

あなたはそれを見つけてうれしい、ようこそ:) – Skycc

関連する問題