如何用Python来组织一个文件夹

253 阅读7分钟

在靠近用户的地方部署容器

本工程教育(EngEd)计划由科支持。

在全球范围内即时部署容器。Section是经济实惠、简单而强大的。

免费开始

如何使用Python组织文件夹

10月14日, 2021

如果你发现自己正在阅读这篇文章,那么很有可能你的桌面上到处都是文件,或者你的下载文件夹是没有组织的,因为所有下载的文件都存放在那里。这可以用Python来解决。

Python是一种高级编程语言,被设计为易于阅读和简单实现。在本指南中,我们将看到如何编写一个可以随时运行的Python脚本,以组织我们计算机上的文件夹。

前提条件

要理解本指南,假定读者对基本的Python编程概念有一定的了解,例如。

  • 数据类型
  • 变量
  • 字符串
  • 流程控制语句
  • 循环

目标

在本指南中,我们将编写一个Python脚本,根据文件名的扩展名将文件移动到一个特定的文件夹。在本指南的最后,我们将有一个函数,通过接收源目录和目标目录作为参数,将文件移动到不同的文件夹中。

python中的函数

不要重复自己(DRY),是编程中的一个基本原则。DRY原则有助于减少软件模式的重复,它主要是通过使用函数的概念来实现的,即参考单一来源或 "片段"。

一个函数是一组或一个代码块,它执行一个特定的任务,安排它是可重复使用的。方法在python中也被称为函数,但它们是不同的。让我们来看看它们的区别。

方法。方法是一个类中的函数,只能用一个对象或一个类的实例来访问。

函数。它本身就是一个函数,不需要实例或对象来访问它,因为它不属于一个类。

声明一个函数。一个函数可以被定义为有参数或无参数*(参数是函数作用的值或属性*)。下面的代码片断显示了如何编写一个函数。

# without parameters
def nameoffunction():
    code
    return statement

# with parameters
def nameoffunction(parameters):
    code
    return statement

从上面的代码片段来看,def 或 define 是用来声明一个函数的关键词。code 是执行函数所代表的任务的代码。return statement 返回函数的输出。

调用一个函数。调用一个函数也被称为执行该函数。我们在调用一个函数时,在它的名字后面加上一个小括号,这个小括号可能带有参数,也可能不带有参数*(参数是在声明函数时给出的代表参数的数据*),取决于该函数是否有小括号。下面的代码片断显示了如何调用一个函数。

#without arguments
nameoffunction()

# with arguments 
nameoffunction(argument)

操作系统模块

OS模块是python的标准工具模块之一,用于与操作系统进行交互。OS模块由许多方法(函数)组成,它们可以执行特定的任务,包括。

  • 使用如下所示的方法获得用户所在的工作目录
os.getcwd()
  • 使用下图所示的方法改变当前工作目录
os.chdir()
  • 使用下图所示的方法列出文件夹和文件
os.listdir()
  • 使用如下所示的方法创建单一和嵌套(一个文件夹在另一个文件夹内)的目录
# single directories
os.mkdir()
# nested directories
os.makedirs()
  • 使用下图所示的方法删除单一和嵌套目录
# single directories
os.rmdir()
# nested directories
os.removedirs()

要了解更多关于其他函数的信息,请参考本文档

os.path模块

*os.*path是python中的一个模块,用于处理和操作系统中的文件路径(文件名和目录)。os.path模块可以用来。

  • 使用os.path.dirname(file path) ,返回一个路径的名称。
  • 使用,检查系统中是否存在任何路径。os.path.exists(file path)
  • 使用 "获取路径的文件大小(字节)"。os.path.getsize(file path)
  • 使用os.path.join(path, *paths) 连接路径组件,正如我们在将多个文件从一个目录移动到另一个目录时看到的那样。

Shutil模块

shutil 模块也是python的标准工具模块之一,用于与文件及其集合进行交互。shutil模块可以用于各种功能,包括。

  • 使用shutil.copyfile(source dir, destination dir,) 将文件从一个目录复制到另一个目录。
  • 使用shutil.rmtree(file path) 删除整个目录。
  • 使用shutil.move(source dir, destination dir, ) 将目录从一个路径移动到另一个路径。要了解更多关于其他功能的信息,请阅读此文档

将一个文件从一个文件夹移动到另一个文件夹

要用python移动文件夹,创建一个新的项目文件并命名为app.py ,然后导入上面提到的两个模块,如下图。

import os, shutil

导入模块后,在你的桌面上创建两个文件夹或目录,名称为file1file2。创建一个名为stt.txt的文件并将其保存在file2中,如图所示。

File 1

File 2

用下面的代码片断更新你的代码。

source_dir = 'C:\\Users\\User\\Desktop\\file2'
destination_dir = 'C:\\Users\\User\\Desktop\\file1'

files = os.listdir(source_dir)

for f in files:
    shutil.move(os.path.join(source_dir, f), destination_dir)

从上面的代码片段中,我们将stt.txt文件所在的file2的路径保存在一个名为source_dir的变量中,并将stt.txt文件所在的file1的路径保存为destination_dir

注意:在文件路径C:\\Users\\User\\Desktop\\file1User是你系统用户的名字。你的名字将是你设定的系统用户的名字。双反斜线(\\)或单斜线(\)将根据你的操作系统起作用,如果反斜线对你不起作用,则使用正斜线(/)。

保存在files变量中的代码os.listdir(source_dir) ,列出了源代码目录内的文件。

从代码片段来看,shutil.move(os.path.join(source_dir, f)os.path.join 是将源文件路径和文件结合在一起,这是从for循环中遍历source_dir中的文件shutil.move 是将文件从source_dir移到destination_dir。在更新你的代码后,运行下面的命令来执行你的代码。

python app.py

使用一个函数移动多个文件

要移动多个文件,首先创建一个新的文件或清除之前的app.py ,然后粘贴下面的代码片段。

import shutil, os

def file_manager(file_source_dir, file_destination_dir):
    source_dir = file_source_dir
    destination_dir = file_destination_dir


    file_names = os.listdir(source_dir)

    for file_name in file_names:
        if os.path.join(source_dir, file_name).endswith('.mp3'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'audios'))

        if os.path.join(source_dir, file_name).endswith('.mp4'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'videos'))

        if os.path.join(source_dir, file_name).endswith('.zip'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'zip'))

        if os.path.join(source_dir, file_name).endswith('.geojson'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'audios'))

        if os.path.join(source_dir, file_name).endswith('.pdf'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'pdf'))

        if os.path.join(source_dir, file_name).endswith('.jpg'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'pictures'))

        if os.path.join(source_dir, file_name).endswith('.png'):
            shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'pictures'))

        return "Success!!!!!"



file_manager('C:\\Users\\User\\Downloads', 'C:\\Users\\User\\Downloads')

在上面的代码中,我们定义了一个名称为file_manager 的函数,参数为file_source_dir,它将接受源目录,以及file_destination_dir,它将接受目标目录file_names。就像前面的代码一样,保存源目录下的文件列表。

代码片段,if os.path.join(source_dir, file_name).endswith('.mp3') ,是一个条件语句,它检查一个文件的名称是否以.mp3 文件扩展名结尾,条件语句有助于移动多个文件,如果它们满足某些条件。

从代码片段shutil.move(os.path.join(source_dir, file_name), os.path.join(destination_dir, 'audios'))os.path.join(source_dir, file_name),像前面的代码一样连接source_dirfile_name。*os.path.join(destination_dir, 'audios')*是将目标文件夹与特定文件夹连接起来,根据文件扩展名存储特定类型的文件。

例如,上面的代码正在检查一个扩展名为.mp3 的文件,这将把该文件移动到一个目标文件夹,该文件夹包含另一个为该类型的文件准备的文件夹,即为MP3文件准备的audios

对于其他文件扩展名,也重复同样的过程。在函数的最后,我们返回了一个字符串success!!!! ,我们使用代码片段file_manager('C:\\Users\\User\\Downloads', 'C:\\Users\\User\\Downloads') ,以参数*'C:\Users\User\Downloads'作为source_dir*,以'C:\Users\User\Downloads'作为destination_dir来调用该函数。

当你执行该代码时,它将扫描下载文件夹,并将符合条件的文件移动到各个文件夹中,如下面的视频演示中所示。

Demo

注意:destination_dirsource_dir 相同,因为目标文件夹在source_dir 内。

在这里找到repo的链接。

结论

我们能够编写一个将文件从一个文件夹移动到另一个文件夹的函数,该函数以包含我们要移动的文件的目录和我们要移动文件的目录为参数。


同行评议的贡献者。Willies Ogola

类似文章

[

How to Create a Reusable React Form component Hero Image

语言

如何创建一个可重复使用的React表单组件

阅读更多

](www.section.io/engineering…

Building a payroll system with next.js Hero Image

语言, Node.js

用Next.js构建一个薪资系统

阅读更多

](www.section.io/engineering…

Creating and Utilizing Decorators in Django example image

架构

在Django中创建和使用装饰器

阅读更多

](www.section.io/engineering…)