python办公自动化(1)——路径问题、文件自动化分类(带过程与结果)

一、路径问题

概念:路径用来表示文件或文件夹的位置。
当我们需要访问文件或文件夹时,路径就像现实中的地址一样,帮助我们找到目标文件或文件夹在什么位置

(1)Windows系统

在Windows系统的路径中,我们使用反斜线 ( \ ) 分隔各个文件夹和文件名。

同时,在路径的最前面,是盘符的字母和一个英文冒号,表示文件或文件夹具体是在哪个盘的路径下。
python办公自动化(1)——路径问题、文件自动化分类(带过程与结果)_第1张图片

(2)macOS系统

而在macOS系统中,文件夹和文件名使用正斜线 ( / ) 进行分隔。

需要注意的是,macOS系统中,没有盘符的概念,所有的路径都是从根目录( / ) 开始。
python办公自动化(1)——路径问题、文件自动化分类(带过程与结果)_第2张图片

二、文件自动化分类

os 模块可用于文件处理操作,os 模块是Python的内置模块,不需要安装可以直接导入。

我们要对文件进行处理,首先要使用 import 导入 os 模块。

# 使用import导入os模块
import os

把需要处理的文件下载下来,将文件保存到了路径: /Users/yequ/Downloads

如图所示:文件夹 Downloads 中有很多文件,例如:PDF、Word、Excel、图片、视频等等。

我们要获得 Downloads 文件夹中的文件名才能进行分类,接下来,学习获取文件夹所有文件名称的方法。

(1)获取文件夹所有文件名称的方法

阿文将文件保存到路径 /Users/yequ/Downloads,我们需要获取该文件夹下所有的文件列表。

先定义一个变量 downloadPath 并将文件夹路径以字符串的格式赋值给它。注意,变量名是区分大小写的。

使用Windows系统的同学在自己的电脑上运行代码时,需要注意路径前要加一个r表示字符串不需要转义。

如:downloadPath = r"D:\yequ\Downloads"

# 使用import导入os模块
import os

# 将文件夹路径 /Users/yequ/Downloads 赋值给变量downloadPath
downloadPath = "/Users/yequ/Downloads"

# 使用print输出downloadPath以检查赋值结果
print(downloadPath)

获取所有文件的名称,需要使用 os 调用 listdir()函数

# 使用import导入os模块
import os

# 文件夹路径 /Users/图片 赋值给变量downloadPath
downloadPath = "/Users/图片"

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

# 使用print函数输出变量allItems以确认列表内容
print(allItems)
#使用 os.listdir() 函数获取文件名后,返回一个列表,列表中的每个元素是图片文件夹中的文件。

python办公自动化(1)——路径问题、文件自动化分类(带过程与结果)_第3张图片

使用 os.listdir() 函数获取路径下所有文件后,无论文件夹中有几个文件都会以列表的形式输出。

得到了所有的文件(夹)名称后,我们需要取出每个文件用于判断类型。

三、判断文件类型

使用for循环遍历列表中所有文件(夹)的名称,并输出,以便稍后去逐个判断。

# 使用for循环遍历所有文件(夹)
for item in allItems:
    # 使用print输出文件(夹)名称
    print(item)

结果

Smoked_Kielbasa_Polka.mp4
长颈鹿颈椎康复中心户外广告.docx
河马洗澡.mp4
非洲最美长颈鹿.jpg
百词斩广告需求.pdf
IMG_0075.jpg

要判断文件类型,我们需要先学习文件后缀名这个概念。

(1)文件后缀名概念

文件后缀名又叫文件扩展名(File extension),可以用来判断某一个文件属于什么类型。

在文件名中,点号,也就是英文句号( . )和其后面的部分即是文件后缀名。
python办公自动化(1)——路径问题、文件自动化分类(带过程与结果)_第4张图片

需要注意的是:

  1. 操作系统通过文件后缀名判断文件类型时,不区分后缀名的大小写。即.jpg和.JPG都表示图片文件

  2. 文件后缀名只是告诉操作系统应该用什么程序来打开文件,修改文件名并不能改变文件类型

(2)文件分类思路

1、对文件进行分隔,取出后缀名,根据后缀名将文件移动到对应文件夹中。

例如:将第一个文件 读书会回忆.avi 进行分隔,获得 读书会回忆 和 .avi 两个部分;.avi 是视频文件,就将 读书会回忆.avi 移到视频文件夹中。

2、分隔文件后缀名
使用 os.path.splitext() 函数就能对文件进行分隔操作。
使用 os.path.splitext() 函数对文件进行分隔后,返回的是一个元组。例如:对文件"主持人_试音.mp3"进行分隔后,输出的是 (‘主持人_试音’, ‘.mp3’)。**元组的第一项是文件名称,元组的第二项是文件后缀名。**然后,我们直接获取第二个元素(文件后缀名)并输出。

3、分隔文件后缀名
得到每个文件的后缀名后,我们就可以使用if语句来判断该后缀名属于哪种类型的文件。比如,判断一个文件后缀名是否是Excel文档后缀就可以使用示例中的代码。

sampleExt1 = ".exe"
sampleExt2 = ".xlsx"

# 使用if语句判断文件类型
if sampleExt1 == ".xlsx" or sampleExt1 == ".xls":
    print("第一个文件是Excel文档")
    
if sampleExt2 == ".xlsx" or sampleExt2 == ".xls":
    print("第二个文件是Excel文档")

结果

第二个文件是Excel文档

在某些情况下,要判断的条件会较多,比如音频文件,需要判断的后缀名就有.wav .mp3 .mid .ape .flac这5种。这种情况下,如果使用if语句 + or运算符的方式,写出来的判断语句就会很长。
为了简化逻辑和代码,我们可以使用 in运算符。in运算符的右边,是一个列表或元组,左边是要判断的元素。如果要判断的元素在列表(元组)中,运算结果为True,如果要判断的元素不在列表(元组)中,运算结果为False。

print(2 in [1,2,3,4,5])
print(9 in [1,2,3,4,5])
print("中" in ["东","西","南","北"])

结果

True
False
False

因此,使用 in 运算符配合 if 语句,就能够以更简练的代码来判断是否是音频文件后缀名。音频文件后缀名有:[“.wav”, “.mp3”, “.mid”, “.ape”, “.flac”]

sampleExt = ".mp3"

# 使用if语句 + in运算符判断是否是音频文件
if sampleExt in [".wav", ".mp3", ".mid", ".ape", ".flac"]:
    print("该文件是音频文件")

结果

该文件是音频文件

4、分类文件
现在,我们再利用刚才学习的in运算符,加上if-elif-else语句,就可以对这些文件进行分类了。本示例中,在对文件进行分类后,使用了格式化字符串同时输出了文件名和文件类型。
注意:文件名和文件类型名称中间有一个空格。

# 使用for循环遍历所有文件(夹)
for item in allItems:
    # 获取文件后缀名赋值给变量extension
    extension = os.path.splitext(item)[1]
    # 根据后缀判断文件类型
    if extension in [".jpg", ".jpeg", ".gif", ".png", ".bmp"]:
        print(f"{item} 图片文件")
    elif extension in [".avi", ".mp4", ".wmv", ".mov", ".flv"]:
        print(f"{item} 视频文件")
    elif extension in [".wav", ".mp3", ".mid", ".ape", ".flac"]:
        print(f"{item} 音频文件")
    elif extension in [".pdf"]:
        print(f"{item} PDF文件")
    elif extension in [".docx", ".doc"]:
        print(f"{item} Word文件")
    elif extension in [".xlsx", ".xls"]:
        print(f"{item} Excel文件" )
    elif extension in [".pptx", ".ppt"]:
        print(f"{item} PPT文件")
    else:
        print(f"{item} 其他文件")


你可能感兴趣的:(Python,python办公自动化,python,自动化,开发语言)