簡體   English   中英

用於查找和移動文件的 Python 腳本

[英]Python Script to Find and Move Files

下面的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

您應該修復縮進:

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

現在您正在循環外復制,因此並非所有文件都被復制

您的代碼縮進不正確。 線路:

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”結尾的文件都將被復制。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM