python办公自动化(2)——字符串转小、转移目标文件、判断文件是否存在(带过程与结果)

一、字符串转小写

通过文件后缀名判断文件类型是不区分大小写的,.mp3和.MP3都表示音频文件。但在前面判断文件类型的代码中,我们只使用了小写的文件后缀名去进行匹配。 这样的话,比如像“xx.MP3”这个文件就被分类到了“其他文件”。

为了解决这个问题,我们可以对文件后缀名使用 lower() 函数

sampleStr1 = "NATE".lower()
sampleStr2 = "Drake".lower()
print(sampleStr1)
print(sampleStr2)

学习了 lower() 函数后,我们现在把它应用到获取文件后缀名的代码中,将文件后缀名全部转换为小写。
转换之后,再使用之前的代码进行判断,“心动.MP3”就能被正确分类了。

# 使用import导入os模块
import os

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

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

# 使用for循环遍历所有文件(夹)
for item in allItems:
    # 获取文件后缀名并使用lower()函数转换成小写
    extension = os.path.splitext(item)[1].lower()
    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} 其他文件") 

二、将文件拖移到相应的文件夹

在移动文件之前,我们首先需要确认文件的移动路径。

例如,要把某个文件移动到音频文件,就需要确定移动到哪里的音频文件夹中
我们首先需要确定目标文件夹的路径。

阿文的习惯,是将每一个分类文件夹创建在下载文件夹中。

例如,图片文件夹的路径为:/Users/yequ/Downloads/图片文件。该路径前半部分为下载文件夹的路径,后半部分为分类文件夹的名字。

1)拼接文件夹

在代码中,使用 os.path.join() 函数来拼接每个分类文件夹的路径

# 使用import导入os模块
import os

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

# 使用os.path.join()函数合并downloadPath和“音频文件”文件夹并赋值给变量targetPath
targetPath = os.path.join(downloadPath, "音频文件")

# 使用print输出变量targetPath
print(targetPath)

结果

/Users/yequ/Downloads/音频文件

2)确定目标文件夹是否存在

如果目标文件夹不存在,需要先创建文件夹再移动。

例如:xx.mp3 需要移动到音频文件夹中,那么需要先检查 Downloads 文件夹中是否已经创建了音频文件夹。

得到了目标文件夹的路径后,我们可以使用 os.path.exists() 函数来判断该文件夹是否已经存在。

os.path.exists() 函数接受一个路径字符串作为参数,当该路径的文件夹存在时,返回True,不存在时,则返回False。

import os

print(os.path.exists("/Users/yequ/Downloads/PDF文件"))
print(os.path.exists("/Users/yequ/Downloads/音频文件"))

结果

True
False

3)判断需要转移的文件夹是哪个

使用 os.path.exists() 函数判断返回的结果是布尔数,邓老师要查看没有建的班级,我们就只输出未创建的文件夹名称。

if 语句用于判断当前条件的真假,只有满足条件时才会执行if语句中的内容。(在判断语句中,对非零值判断为真:对数字0的判断为假:对None的判断为假。)

我们要输出结果为 False 的班级,这里就需要使用关键字 not 运算符 搭配 os.path.exists() 函数,再使用 if语句 来判断结果并输出

# for循环遍历班级列表
for item in stuClass:
    # 使用os.path.join()拼接班级列表,赋值给targetPath
    targetPath = os.path.join(path, item)
    # 使用os.path.exists()函数判断当目标文件夹不存在时
    if not os.path.exists(targetPath):
        # 使用格式化输出,x班
        print(f"{item}")

在这里如果应该转移的文件夹不存在,结果为false。not false为true,满足条件执行if语句中的内容,输出不存在的文件夹名.

例题
Ivy老师的班级有20个学生,他们的名字分别是:James, Harry, Maggie, Joan, Judy, Fred, Roy, Billy, Louis, Tony, Kevin, Tracy, Vincent, Jay, Dean, Neil, Faye, Evan, Dana, Kelly。

现在Ivy老师让所有学生把证件照交给她,并以他们的名字来命名照片文件。例如:Harry.jpg

所有已经收到的照片被Ivy老师放到了电脑里的 /Users/ivy/证件照 文件夹下。

目前还有一些同学没有交照片,请运用学习过的文件操作相关知识,定义一个变量名为notSubList的列表,将还没有交照片同学的名字放入到列表中,最后使用print输出notSubList列表的内容。

注意:同学交上来的照片命名不完全规范,可能有全部小写和全部大写的情况。

# TODO 导入os模块
import os

# 所有的学生名字列表
studentList = ["James", "Harry", "Maggie", "Joan", "Judy", "Fred", "Roy", "Billy", "Louis", "Tony", "Kevin", "Tracy", "Vincent", "Jay", "Dean", "Neil", "Faye", "Evan", "Dana", "Kelly"]

# TODO 将路径 /Users/ivy/证件照 赋值给变量photoPath
photoPath="/Users/ivy/证件照"

# TODO 使用函数os.listdir()获取路径下所有的文件列表并赋值给变量allPhotos
allPhotos=os.listdir(photoPath)

# 定义一个空列表变量lowerSubList
# 用来装已经收到照片同学名字的列表,全小写
lowerSubList = []

# 遍历文件列表
for photo in allPhotos:
    # TODO 使用os.path.splitext()函数分隔后缀名
    # 取第一个元素,也就是姓名的部分赋值给变量name
    name=os.path.splitext(photo)[0]

    # TODO 将name用lower()函数转成小写添加到列表lowerSubList中
    # 需要用到列表的append()函数
    lowerSubList.append(name.lower())

# TODO 定义空列表变量notSubList, 用来放没有提交照片用户的名字
notSubList=[]

# 遍历所有学生名字列表
for student in studentList:
    # TODO 将名字用lower()转成小写然后判断当不在已经提交的名单时
    if student.lower() not in lowerSubList:
        # TODO 找到没有提交同学的名字,添加到列表notSubList
        notSubList.append(student)

# TODO 输出notSubList,也就是没有交照片同学的名字
print(notSubList)

结果

['James', 'Joan', 'Tracy', 'Jay', 'Faye', 'Dana']

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