簡體   English   中英

組織文件時忽略文件夾

[英]Ignoring folders when organizing files

我對python相當陌生,並試圖編寫一個程序來根據文件的擴展名組織文件

import os
import shutil

newpath1 = r'C:\Users\User1\Documents\Downloads\Images'
if not os.path.exists(newpath1):                     # check to see if they already exist
    os.makedirs(newpath1)
newpath2 = r'C:\Users\User1\Documents\Downloads\Documents'
if not os.path.exists(newpath2):
    os.makedirs(newpath2)
newpath3 = r'C:\Users\User1\Documents\Downloads\Else'
if not os.path.exists(newpath3):
    os.makedirs(newpath3)

source_folder = r"C:\Users\User1\Documents\Downloads" # the location of the files we want to move
files = os.listdir(source_folder)

for file in files:
    if file.endswith(('.JPG', '.png', '.jpg')):
        shutil.move(os.path.join(source_folder,file), os.path.join(newpath1,file))
    elif file.endswith(('.pdf', '.pptx')):
        shutil.move(os.path.join(source_folder,file), os.path.join(newpath2,file))
    #elif file is folder:
        #do nothing
    else:
        shutil.move(os.path.join(source_folder,file), os.path.join(newpath3,file))

我希望它根據擴展名移動文件 但是,我想弄清楚如何阻止文件夾移動。 任何幫助將不勝感激。

此外,由於某種原因,並非每個文件都被移動,即使它們具有相同的擴展名。

與大多數路徑操作一樣,我建議使用pathlib模塊。 Pathlib 從 Python 3.4 開始可用,並具有可移植(多平台)、用於文件系統操作的高級 API。

我建議在Path對象上使用以下方法,以確定它們的類型:

import shutil
from pathlib import Path


# Using class for nicer grouping of target directories
# Note that pathlib.Path enables Unix-like path construction, even on Windows
class TargetPaths:
    IMAGES = Path.home().joinpath("Documents/Downloads/Images")
    DOCUMENTS = Path.home().joinpath("Documents/Downloads/Documents")
    OTHER = Path.home().joinpath("Documents/Downloads/Else")
    __ALL__ = (IMAGES, DOCUMENTS, OTHER)


for target_dir in TargetPaths.__ALL__:
    if not target_dir.is_dir():
        target_dir.mkdir(exist_ok=True)


source_folder = Path.home().joinpath("Documents/Downloads")  # the location of the files we want to move
# Get absolute paths to the files in source_folder
# files is a generator (only usable once)
files = (path.absolute() for path in source_folder.iterdir() if path.is_file())


def move(source_path, target_dir):
    shutil.move(str(source_path), str(target_dir.joinpath(file.name))


for path in files:
    if path.suffix in ('.JPG', '.png', '.jpg'):
        move(path, TargetPaths.IMAGES)
    elif path.suffix in ('.pdf', '.pptx'):
        move(path, TargetPaths.DOCUMENTS)
    else:
        move(path, TargetPaths.OTHER)

這里

特別是os.walk命令 此命令返回一個包含目錄路徑、目錄名和文件名的 3 元組。

在你的情況下,你應該使用[x[0] for x in os.walk(dirname)]

暫無
暫無

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

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