python文件自动化(4)

接上节课内容,在开始正式移动文件到目标文件夹之前,我们需要再思考一个问题。
在代码运行之前,阿文的下载文件夹里已经存在一些分类文件夹了,比如图例中“PDF文件”这个文件夹就是已经存在的。
这样的话,在程序运行时,按目前的逻辑,计算机就会把这个文件夹分类为其他文件,因为这个文件夹没有后缀名。

因此,每运行一遍代码,之前已经创建的文件夹都会被移动到“其他文件”这个文件夹下。
为了避免将文件夹移动到其他文件中,我们需要先判断该文件是否是文件夹,不是文件夹再移动。

修改代码

使用os.path.join()函数拼接文件路径,并赋值给变量itemPath。

我们先使用 os.path.join() 函数拼接出文件目前所在路径,也就是使用下载文件夹的路径文件名进行合并。图例中我们先将合并后的文件路径赋值给变量 itemPath ,然后使用print输出itemPath。

# 使用import导入os模块

import os

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名

    extension = os.path.splitext(item)[1].lower()

    # 定义一个变量targetPath,用来表示准备移动到的文件夹路径

    targetPath = ""

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        # 使用os.path.join()函数拼接分类文件夹路径:图片文件

        targetPath = os.path.join(downloadPath, "图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        # 使用os.path.join()函数拼接分类文件夹路径:视频文件

        targetPath = os.path.join(downloadPath, "视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        # 使用os.path.join()函数拼接分类文件夹路径:音频文件

        targetPath = os.path.join(downloadPath, "音频文件")

    elif extension in [".pdf"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PDF文件

        targetPath = os.path.join(downloadPath, "PDF文件")

    elif extension in [".docx", ".doc"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Word文件

        targetPath = os.path.join(downloadPath, "Word文件")

    elif extension in [".xlsx", ".xls"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Excel文件

        targetPath = os.path.join(downloadPath, "Excel文件")

    elif extension in [".pptx", ".ppt"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PPT文件

        targetPath = os.path.join(downloadPath, "PPT文件")

    else:

        # 使用os.path.join()函数拼接分类文件夹路径:其他文件

        targetPath = os.path.join(downloadPath, "其他文件")

    # 如果目标文件夹不存在,使用os.mkdir()函数创建文件夹

    if not os.path.exists(targetPath):

        os.mkdir(targetPath)

    # 使用os.path.join函数拼接文件路径,并赋值给变量itemPath

    itemPath = os.path.join(downloadPath, item)

   

    # 使用print()输出文件路径

    print(itemPath)

判断路径是否是文件夹

我们将要进行判断的文件路径传入到 os.path.isdir() 函数中,如果该路径是文件夹就会返回True,如果不是就返回False。

判断当itemPath路径是一个文件夹时,输出变量itemPath。

将文件路径传入 os.path.isdir() 函数中,由于该函数返回的是布尔数
我们可以使用 if 语句进行判断,当结果是 True 时,也就是该路径是一个文件夹时,使用print输出itemPath。

# 使用import导入os模块

import os

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名

    extension = os.path.splitext(item)[1].lower()

    # 定义一个变量targetPath,用来表示准备移动到的文件夹路径

    targetPath = ""

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        # 使用os.path.join()函数拼接分类文件夹路径:图片文件

        targetPath = os.path.join(downloadPath, "图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        # 使用os.path.join()函数拼接分类文件夹路径:视频文件

        targetPath = os.path.join(downloadPath, "视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        # 使用os.path.join()函数拼接分类文件夹路径:音频文件

        targetPath = os.path.join(downloadPath, "音频文件")

    elif extension in [".pdf"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PDF文件

        targetPath = os.path.join(downloadPath, "PDF文件")

    elif extension in [".docx", ".doc"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Word文件

        targetPath = os.path.join(downloadPath, "Word文件")

    elif extension in [".xlsx", ".xls"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Excel文件

        targetPath = os.path.join(downloadPath, "Excel文件")

    elif extension in [".pptx", ".ppt"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PPT文件

        targetPath = os.path.join(downloadPath, "PPT文件")

    else:

        # 使用os.path.join()函数拼接分类文件夹路径:其他文件

        targetPath = os.path.join(downloadPath, "其他文件")

    # 如果目标文件夹不存在,使用os.mkdir()函数创建文件夹

    if not os.path.exists(targetPath):

        os.mkdir(targetPath)

    # 使用os.path.join函数拼接文件路径,并赋值给变量itemPath

    itemPath = os.path.join(downloadPath, item)

    # 使用if判断itemPath路径是一个文件夹时

    if os.path.isdir(itemPath):

        # 使用print()输出itemPath

        print(itemPath)

移动文件夹

要想移动文件,我们需要导入Python中另一个内置的模块 shutil ,然后使用 shutil.move() 函数来对文件进行移动。
shutil.move() 函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。

代码修改

导入shutil模块。
判断当itemPath不是文件夹时,使用shutil.move()函数移动itemPath路径的文件到targetPath路径的文件夹。

阿文的需求,是把分好类的文件移动到对应的文件夹里。

所以我们只需在程序判断 itemPath 不是一个文件夹的时候,使用 shutil.move() 函数将itemPath路径的文件移动到targetPath路径的文件夹下。

# 使用import导入os模块

import os

# 使用import导入shutil模块

import shutil

# 将阿文的下载文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath

downloadPath = "/Users/yequ/Downloads"

# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItems

allItems = os.listdir(downloadPath)

# 使用for循环遍历所有文件(夹)

for item in allItems:

    # 获取文件后缀名

    extension = os.path.splitext(item)[1].lower()

    # 定义一个变量targetPath,用来表示准备移动到的文件夹路径

    targetPath = ""

    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:

        # 使用os.path.join()函数拼接分类文件夹路径:图片文件

        targetPath = os.path.join(downloadPath, "图片文件")

    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:

        # 使用os.path.join()函数拼接分类文件夹路径:视频文件

        targetPath = os.path.join(downloadPath, "视频文件")

    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:

        # 使用os.path.join()函数拼接分类文件夹路径:音频文件

        targetPath = os.path.join(downloadPath, "音频文件")

    elif extension in [".pdf"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PDF文件

        targetPath = os.path.join(downloadPath, "PDF文件")

    elif extension in [".docx", ".doc"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Word文件

        targetPath = os.path.join(downloadPath, "Word文件")

    elif extension in [".xlsx", ".xls"]:

        # 使用os.path.join()函数拼接分类文件夹路径:Excel文件

        targetPath = os.path.join(downloadPath, "Excel文件")

    elif extension in [".pptx", ".ppt"]:

        # 使用os.path.join()函数拼接分类文件夹路径:PPT文件

        targetPath = os.path.join(downloadPath, "PPT文件")

    else:

        # 使用os.path.join()函数拼接分类文件夹路径:其他文件

        targetPath = os.path.join(downloadPath, "其他文件")

    # 如果目标文件夹不存在,使用os.mkdir()函数创建文件夹

    if not os.path.exists(targetPath):

        os.mkdir(targetPath)

    # 使用os.path.join()函数拼接文件路径,并赋值给变量itemPath

    itemPath = os.path.join(downloadPath, item)

    # 判断当itemPath路径不是文件夹时,移动文件到分类文件夹去

    if not os.path.isdir(itemPath):

        # 使用shutil.move()函数移动文件到targetPath路径

        shutil.move(itemPath, targetPath)

shutil.move()函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。

至此,我们帮助阿文编写的,对文件自动分类并移动的代码就全部完成啦。可以发现,几乎是一瞬间,几十个文件就全部分类并移动到指定的文件夹了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext new ClassPathXmlApplicationContext("bean.xml"); } BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanFactory的功能相似,都是…

linux 安装redis

1. 更新系统和安装依赖 sudo apt update sudo apt install build-essential tcl2. 下载 Redis 源码(没有opt文件夹,则先创建opt文件夹) cd /opt wget http://download.redis.io/releases/redis-6.2.6.tar.gz3. 解压和编译 Redis 解压下载的文件,并进入…

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本

一、功能特点 广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。可对每个设备设…

AtCoder Beginner Contest 370-C~D题解

AtCoder Beginner Contest 370-C题解 思路 整体来说&#xff0c;一眼是一个贪心&#xff0c;具体来说先把让字典序变小的字符变化&#xff0c;让后再让字典序变大的字符变化 代码 #include <bits/stdc.h> using namespace std; char s[105],t[105]; int a[105],sum; …

深入了解以太坊

1. 以太坊编程语言和操作码 以太坊中智能合约的代码以高级语言编写&#xff0c;如 Serpent、LLL、Solidity 或 Viper,并可转换为 EVM 可以理解的字节码&#xff0c;以便执行。 Solidity 是为以太坊开发的高级语言之一&#xff0c;它具有类似 JavaScript 的语法&#xff0c;可以…

用广播星历计算卫星运动的平均角速度

用广播星历计算卫星位置 1.计算卫星运动的平均角速度 首先根据广播星历中给出的参数计算参考时刻的平均角速度: 式中&#xff0c;GM为万有引力常数G与地球总质量M之乘积&#xff0c;其值为GM3.98600510^14b m3/s2。 然后根据广播星历中给定的摄动参数计算观测时刻卫星的平均…

使用AI写WebSocket知识是一种怎么样的体验?

一、WebSocket基础知识 1. WebSocket概念 1.1 为什么会出现WebSocket 一般的Http请求我们只有主动去请求接口&#xff0c;才能获取到服务器的数据。例如前后端分离的开发场景&#xff0c;自嘲为切图仔的前端大佬找你要一个配置信息的接口&#xff0c;我们后端开发三下两下开…

JDBC:连接数据库

文章目录 报错 报错 Exception in thread “main” java.sql.SQLException: Can not issue SELECT via executeUpdate(). 最后这里输出的还是地址&#xff0c;就是要重写toString()方法&#xff0c;但是我现在还不知道怎么写 修改完的代码&#xff0c;但是数据库显示&#…

STL-详细介绍list

目录 一、含义介绍 二、遍历&#xff08;迭代器和范围for&#xff09; 三、部分接口介绍 1.将两个有序链表归并成一个&#xff1a;merge&#xff08;&#xff09; 2、去重&#xff1a;unique&#xff08;&#xff09; 3、将一个链表或链表的结点或链表的迭代器区间插入到另…

2. 下载rknn-toolkit2项目

官网链接&#xff1a; https://github.com/airockchip/rknn-toolkit2 安装好git&#xff1a;[[1. Git的安装]] 下载项目&#xff1a; git clone https://github.com/airockchip/rknn-toolkit2.git或者直接去github下载压缩文件&#xff0c;解压即可。

ASIO网络调试助手之一:简介

多年前&#xff0c;写过几篇《Boost.Asio C网络编程》的学习文章&#xff0c;一直没机会实践。最近项目中用到了Asio&#xff0c;于是抽空写了个网络调试助手。 开发环境&#xff1a; Win10 Qt5.12.6 Asio(standalone) spdlog 支持协议&#xff1a; UDP TCP Client TCP Ser…

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略&#xff0c;该策略要求请求的域名、协议和端口必须与提供资源的服务相同。…

Linux线程管理进阶:分离,等待、终止与C++11线程接口的封装实践

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;线程终止&#x1f34d;线程等待*多线程创建&#xff0c;传自己定义的对象示例代码&#xff1a;* &#x1f34e;线程的分…

STM32(十二):DMA直接存储器存取

DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源。&#xff08;运行内存SRAM、程序存储器Flash、寄存器&#xff09; 12个独立可配置的通道&…

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2890 标注数量(xml文件个数)&#xff1a;2890 标注数量(txt文件个数)&#xff1a;2890 标注…

页面要突破手机安全区域来全屏显示(沉浸式模式显示),其他页面不需要,如何设置安全区域文字颜色

#效果图 ##思路遇到的问题 在aboutToAppear中使用window模块的 getLastWindow 和 setWindowLayoutFullScreen两个方法来处理全屏显示 设置沉浸式模式的特点&#xff1a; 在任何一个页面中设置过一次之后&#xff0c;其他页面也会跟着全屏显示 这么处理会出现问题&#xff1a…

在Ubuntu 20.04上安装Nginx的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Nginx 是世界上最流行的 Web 服务器之一&#xff0c;负责托管互联网上一些最大和流量最高的网站。它是一个轻量级选择&#xff0c…

如何使用Spoon连接data-integration-server并在服务器上执行转换

1.建立连接 2.新建转换或任务 3.右键[子服务器]&#xff0c;新建一个服务器连接(data-integration-server服务器的连接信息) 4.右键[Run configurations],新建一个执行连接,勾选相应的选项即可: 5.选择服务器运行即可! 6.最后&#xff0c;你可以通过服务器端的WEB查看执行日志…

猫眼电影字体破解(图片转码方法)

问题 随便拿一篇电影做样例。我们发现猫眼的页面数据在预览窗口中全是小方框。在当我们拿到源码以后&#xff0c;数据全是加密后的。所以我们需要想办法破解加密&#xff0c;拿到数据。 破解过程 1.源码获取问题与破解 分析 在我们刚刚请求url的时候是可以得到数据的&#xff…

【MySQL】MySQL操作介绍

MySQL操作 认识 MySQL什么是 MySQL关系型数据库的组成结构"客户端-服务器"结构 数据库的基本操作创建数据库查看数据库删除数据库使用数据库 数据类型整型浮点类型字符串类型日期类型总结 表的操作创建表查看表查看表的信息删除表 数据的基础操作插入数据指定列插入全…