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