2016-07-30 71 views
0

以下python代碼的用途是查找包含在rootdir1路徑內任何文件夾中的所有.jpg文件,並將所有文件移至目標文件夾。用於查找和移動文件的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) #<--- Here Is The Change 
      shutil.copy2(SourceFolder, TargetFolder) #<--- Here Is The Change 

你複製外循環,所以不是所有的文件複製

回答

1

您應該解決的壓痕。行:

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

將僅一次通過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'結尾的文件都將被複制。

也有可能您可能會覆蓋具有相同基本名稱的文件,並且這可能導致丟失的文件,如果您實際上移動該文件而不是僅複製它。您可以檢查目標目錄中是否存在具有相同名稱的文件,然後打印警告,或者在複製文件時以某種方式重命名該文件。

+1

我認爲你標記的那些行應該進一步縮進。否則,您將複製*所有*文件,以.jpg結尾或不包含。當然,@jedwards當然是 – jedwards

+1

@jedwards。固定。 –

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) 
    shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder