用于查找和移动文件的Python脚本

时间:2016-07-30 23:34:36

标签: python shutil

以下python代码的目的是查找rootdir1路径中任何文件夹中包含的所有.jpg文件,并将所有文件移动到目标文件夹。

当我发现检查代码的工作时,我发现了一些未复制到目标文件夹的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

2 个答案:

答案 0 :(得分: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 :(得分: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

现在每个文件以&#39; .jpg&#39;结尾将被复制。

您也可能覆盖具有相同基本名称的文件,如果您实际上移动文件而不是仅仅复制文件,这可能会导致文件丢失。您可以检查目标目录中是否已存在具有相同名称的文件,然后打印警告,或在复制时以某种方式重命名该文件。