100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python办公自动化(2)——字符串转小 转移目标文件 判断文件是否存在(带过程与结果)

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

时间:2019-01-14 05:33:28

相关推荐

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 赋值给变量downloadPathdownloadPath = "/Users/yequ/Downloads"# 使用os.listdir()函数获取该路径下所有的文件(夹),并赋值给变量allItemsallItems = 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" 赋值给downloadPathdownloadPath = "/Users/yequ/Downloads"# 使用os.path.join()函数合并downloadPath和“音频文件”文件夹并赋值给变量targetPathtargetPath = os.path.join(downloadPath, "音频文件")# 使用print输出变量targetPathprint(targetPath)

结果

/Users/yequ/Downloads/音频文件

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

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

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

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

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

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

结果

TrueFalse

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

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

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

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

# for循环遍历班级列表for item in stuClass:# 使用os.path.join()拼接班级列表,赋值给targetPathtargetPath = 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/证件照 赋值给变量photoPathphotoPath="/Users/ivy/证件照"# TODO 使用函数os.listdir()获取路径下所有的文件列表并赋值给变量allPhotosallPhotos=os.listdir(photoPath)# 定义一个空列表变量lowerSubList# 用来装已经收到照片同学名字的列表,全小写lowerSubList = []# 遍历文件列表for photo in allPhotos:# TODO 使用os.path.splitext()函数分隔后缀名# 取第一个元素,也就是姓名的部分赋值给变量namename=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 找到没有提交同学的名字,添加到列表notSubListnotSubList.append(student)# TODO 输出notSubList,也就是没有交照片同学的名字print(notSubList)

结果

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。