当前位置: 首页 > news >正文

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()函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。

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

相关文章:

python文件自动化(4)

接上节课内容,在开始正式移动文件到目标文件夹之前,我们需要再思考一个问题。在代码运行之前,阿文的下载文件夹里已经存在一些分类文件夹了,比如图例中“PDF文件”这个文件夹就是已经存在的。这样的话,在程序运行时&am…...

HTTP 方法

HTTP 方法 1. 引言 HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的协议之一。它定义了客户端和服务器之间交换信息的格式和规则。在HTTP通信中,客户端(通常是浏览器)向服务器…...

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先,需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装: helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…...

vue3集成sql语句编辑器

使用的是codemirror 安装 pnpm add codemirror vue-codemirror --savepnpm add codemirror/lang-sqlpnpm add codemirror/theme-one-dark使用 <template><codemirror v-model"configSql" placeholder"Code goes here..." ref"codemirrorR…...

Optuna发布 4.0 重大更新:多目标TPESampler自动化超参数优化速度提升显著

Optuna这个备受欢迎的超参数优化框架在近期发布了其第四个主要版本。自2018年首次亮相以来&#xff0c;Optuna不断发展&#xff0c;现已成为机器学习领域的重要工具。其用户社区持续壮大&#xff0c;目前已达到以下里程碑&#xff1a; 10,000 GitHub星标每月300万 下载量16,00…...

https和harbor仓库跟k8s

目录 https 做证书 harbor仓库 https https是加密的http&#xff0c;它的端口是443&#xff0c;它的协议是tcp协议。建立连接和普通的tcp是一样的&#xff0c;都是三次握手和四次挥手&#xff0c;但是它三次握手之后有一个步骤&#xff1a;SSL或者TLS握手的过程&#xff0c…...

云计算之网络

目录 一、VPC&#xff1a;云网络的基石 1.1 VPC产品介绍 1.2 vswitch交换机 1.3 vrouter路由器 1.4 产品架构 1.5 常见问题解答及处理 1.5.1 VPC内如何查询某个IP归属? 1.5.2 网络ACL阻断导致ECS访问CLB不通 1.5.3 EIP秒级突发/分布式限速丢包 1.5.4 NAT网关的流量监…...

MySQL Workbench 的入门指南

前言 MySQL Workbench 是一个官方的图形化工具&#xff0c;用于开发、管理和设计 MySQL 数据库服务器。它提供了丰富的功能&#xff0c;可以帮助数据库管理员、开发者以及DBA们高效地工作。下面是一个MySQL Workbench的入门指南&#xff0c;介绍如何安装和使用它。 安装 MyS…...

【SpringBoot】使用Nacos服务注册发现与配置管理

前提&#xff1a;需要提前部署好nacos服务&#xff0c;这里可以参考我的文章&#xff1a;Windows下Nacos安装与配置 0. 版本信息 Spring Boot3.2.8Spring Cloud2023.0.1Spring Cloud alibaba2023.0.1.0nacos2.3.2本地安装的nacos2.3.0 Spring Boot、Spring Cloud、Spring Clo…...

Leetcode面试经典150题-210.课程表II

这个题是图的问题&#xff0c;因为图的拓扑排序在实际应用中有非常多的用途图&#xff0c;所以最近考的越来越多 解法都在代码里&#xff0c;不懂就留言或者私信 看这个题之前一定要好好看看207题我写的题解&#xff0c;也许207看懂了的话&#xff0c;210只是一个coding问题了…...

视频汇聚平台LntonAIServer视频质量诊断功能--偏色检测与噪声检测

随着视频监控技术的不断进步&#xff0c;视频质量成为了决定监控系统性能的关键因素之一。LntonAIServer新增的视频质量诊断功能&#xff0c;特别是偏色检测和噪声检测&#xff0c;进一步强化了视频监控系统的可靠性和实用性。下面我们将详细介绍这两项功能的技术细节、应用场景…...

Vue 使用接口返回的背景图片和拼图图片进行滑动拼图验证

一、背景 前两天发了一篇 vue-monoplasty-slide-verify 滑动验证码插件使用及踩坑_vue-monoplasty-slide-verify 引用后不显示-CSDN博客 这两天项目又需要通过接口校验&#xff0c;接口返回了背景图片和拼图图片&#xff0c;于是在网上找了一篇帖子&#xff0c;vue 图片滑动…...

1-7 掩膜的运用 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 num_pixels np.sum(mask 255) contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) c max(contours, keycv2.contourArea) x, y, w, h cv2.boundingRect(c) M cv2.moments(contours[0]) if contours…...

EG边缘计算网关连接华为云物联网平台(MQTT协议)

需求概述 实现一个流程&#xff1a;EG8200mini采集Modbus RTU数据&#xff0c;通过MQTT协议连接华为云物联网平台 Modbus RTU采集此处不做过多赘述&#xff0c;可参考其他案例&#xff08;串口读取Modbus传感器数据&#xff09;介绍。下文默认已经采集到Modbus RTU数据。 要…...

List中常见的方法和五种遍历方式

有序&#xff1a;存取的顺序一致 有索引&#xff1a;可以通过索引操作元素 可重复&#xff1a;存储的元素可以重复 package mylist;import java.util.ArrayList; import java.util.List;public class A01_LIstDemo1 {public static void main(String[] args) {List<String…...

华为 HCIP-Datacom H12-821 题库 (8)

有需要题库的可以看主页置顶 1.在 DHCP 运行过程中&#xff0c;如果客户端 IP 地址在相约过去 87.5%还没有完成续约的话&#xff0c;客户将发送什么报文进行再次续约&#xff1f; A、DHCP discover 广播报文 B、DHCP release 单播报文 C、DHCP request 广播报文 D、DHCP reques…...

12. GIS地图制图工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…...

ORACLE 统计信息的备份与恢复

备份 --需要先创建统计信息基础表 exec dbms_stats.create_stat_table(USER1,STAT_TIMESTAMP); --导出某个用户的所有统计信息 exec dbms_stats.export_schema_stats(USER1,STAT_TIMESTAMP);--测试(插入100条&#xff0c;更新统计信息&#xff0c;略) select num_rows,last_ana…...

2. GIS数据工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…...

Spark MLlib模型训练—文本算法 LDA(Latent Dirichlet Allocation)

Spark MLlib模型训练—文本算法 LDA(Latent Dirichlet Allocation) Latent Dirichlet Allocation(LDA)是一种用于主题建模的生成式概率模型,广泛应用于文本分析和自然语言处理。LDA 的目标是从一组文档中发现潜在的主题,并将每个文档表示为这些主题的概率分布。它通过推断…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...