2016-07-30 69 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