2016-07-30 4 views
0

以下のpythonコードの目的は、rootdir1パス内の任意のフォルダに含まれるすべての.jpgファイルを検索し、すべてのファイルをtargetfolderに移動することです。ファイルを検索して移動するPythonスクリプト

コードの作業を確認したところ、対象のフォルダにコピーされなかったいくつかのjpgが見つかりました。コードでは何が分かりませんか?

import os 
import shutil 

RootDir1 = r'/Users/brianwuollet/Desktop/Takeout' 
TargetFolder = r'/Users/brianwuollet/Desktop/Photos' 
for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False): 
    for name in files: 
     if name.endswith('.jpg'): 
      print "Found" 
    SourceFolder = os.path.join(root,name) 
    shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder 

答えて

1

あなたはインデントを修正する必要があります。

import os 
import shutil 

RootDir1 = r'/Users/brianwuollet/Desktop/Takeout' 
TargetFolder = r'/Users/brianwuollet/Desktop/Photos' 
for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False): 
    for name in files: 
     if name.endswith('.jpg'): 
      print "Found" 
      SourceFolder = os.path.join(root,name) #<--- Here Is The Change 
      shutil.copy2(SourceFolder, TargetFolder) #<--- Here Is The Change 

今あなたが

+1

あなたがマークした行は、さらにインデントしてください。そうしないと、すべての*ファイルが.jpg形式でコピーされます。もちろん@jedwards、 – jedwards

+1

。一定。 –

1

をコピーしたすべてのファイルのループの外にコピーし、そうしていない、あなたのコードのインデントが正しくありません。ライン:

SourceFolder = os.path.join(root,name) 
shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder 

は、各ディレクトリからコピーされた1つのファイルだけが得られos.walk()が通過する各ディレクトリのために一度だけ実行されます。コードを次のように変更します。

for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False): 
    for name in files: 
     if name.endswith('.jpg'): 
      print "Found" 
      SourceFolder = os.path.join(root,name) 
      shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder 

「.jpg」で終わる各ファイルがコピーされます。

同じベース名のファイルを上書きする可能性もあります。実際にの場合はファイルをコピーする代わりにに移動するとファイルが失われる可能性があります。同じ名前のファイルがすでにターゲットディレクトリに存在するかどうかを確認し、警告を出力したり、ファイルをコピーするときに名前を変更したりすることができます。

関連する問題