批量处理文件名称(下)

批量处理文件名称(下)

简介:今天我们会在上节课的基础上实现新功能:筛选PDF文档等文档,将结果写入文件。课后你还能在我提供给你的代码基础上自由拓展更多用法。

案例描述

欢迎来到今天的课堂,和我一起继续完成办公自动化的案例学习,帮你早日掌握用Python快速便捷解决工作难题的技能,给下班按下加速键~

上节课程中我们用5行代码实现了提取文件夹下所有文档名称的任务(如果忘记也没关系,稍后我会带你一起复习一下)
但实际应用场景中,要求可能不会这么简单。假如领导需要让你在杂乱的文档中提取所有PDF格式的参考文献,或png格式的图片,文件夹中的文档数量多达几百上千,还要把结果存到表格中,怎么从数量庞大的文档中准确挑选需要的内容呢?
我们马上就来实现这个功能,有了上节课的铺垫,只需要在原本的代码上稍加修改,就能解决问题。开始行动!

案例分析

想要实现今天自动判断文件类型,结果写入表格文件的新功能,其实只需要在上节课的基础上增加几行简单的代码,当当当~请看:

import os
import pandas 
path=''D:/课程/python/资料夹
name=os.listdir(path)
result=[]
for i in name:
    if i.endswith('.pdf'):
        result.append(i)
result_table=pandas.DataFrame(result)
result_table.to_csv('pdfname.csv',encoding='utf-8-sig')

与上次一样此处的路径仍需根据自己的需求更改

path='自己所需的路径'

你是不是已经迫不及待想要了解其中的方法和原理了?和之前一样,先来梳理本节知识的整体思路:

- 创建容器存放结果

创建新的列表类型变量,为存放结果作准备

- 寻找PDF文档

书写条件,判断文档是否符合条件,符合则加入步骤二内创建的容器内

- 保存到表格文件

将第三步得到的文档名称保存到scv表格文件

1. 创建容器存放结果

其实,我们只需要把上节课获取到的文档名称进行挑选甄别,找到指定格式文档,存储起来,就能达到文件筛选的目的。
这就需要在写入表格文件之前先插入一段判断文档格式的代码。

#导入所需要的库,os 模块提供了非常丰富的方法用来处理文件和目录
import os
import pandas 
#指定文件夹的路径
path='D:/课程/python/资料夹'
#读取文件夹下的文档名称
name=os.listdir(path)
#插入代码,实现文件筛选功能

现在所有文档名存放在name变量中,要从中挑选出PDF格式文件,就好比在一个盛满了各种口味水果糖的碗里把水蜜桃口味挑选出来。

当然需要一个新的容器来盛放我们精心挑选的水蜜桃糖果了。下面就来为你介绍Python中的一个容器——列表

- 列表
	我们可以往列表这个容器中装各种类型的数据,比如数字,字符等等。

列表需要用中括号[ ]把里面的各种数据框起来,数据之间用英文逗号隔开,例如一个列表中存放三个文件名[‘A.pdf’,‘B.pdf’,‘C.pdf’]

上节课中,我们使用os模块中的listdir()方法,得到了全部文档名称,这些名称都存放在变量name中,其实name就是一个列表。

我在最后加入一行print()语句,打印出列表name,看一下效果:

代码练习如下:

#导入所需要的库,os 模块提供了非常丰富的方法用来处理文件和目录
import os 
#指定文件夹的路径
path='D:/课程/python/资料夹'
#读取文件夹下的文档名称
name=os.listdir(path)
#打印列表
print(name)

下面我们需要创建一个新的容器,把从大容器name中挑选出的PDF格式文件装入其中。方法非常简单:

result=[]

这样我们成功创建了一个空列表,起名为result,用于盛放稍后挑选出的PDF文件。

2. 寻找PDF文档

终于来到了激动人心的筛选环节。这里我们的实现思路也非常简单易懂。

每个文件都有它的后缀名,是计算机用来标记文件类型的一种机制。常见的扩展名有.doc代表word文件;.mp3代表音频文件;.jpg代表图片等等。
PDF文件的扩展名是.pdf。因此想要判断一个文件是否为PDF格式,只需要判断它的扩展名是否为.pdf,也就是文档名称是不是以.pdf结尾就可以啦。

接下来我们对路径下的每一个文档名称进行判断。
注意,我刚才说的是对每一个文档进行判断,也就是需要反复进行一个操作,看到这里机智的你应该能联想到,上节课讲过的循环语句即将派上用场了。

回忆一下它的结构

for 元素 in 序列:
执行的操作

endswith()方法,可以确定某字符结尾是否为括号中的指定内容。在这个案例中,我们需要选择PDF格式文件,就可以用endswith(’.pdf’)来判断。

如果答案为‘是’,就把这个文件名添加到刚才创建的result列表中。

列表添加元素的方式是:列表名.append(添加的元素)
列表添加元素的方式是:列表名.append(添加的元素)

例如要在列表result中添加’a.pdf’,就可以用result.append(‘a.pdf’)

for i in name:
    if i.endswith('.pdf'):
        result.append(i)

从上面的代码中可以看到,在Python中,我们需要使用if条件语句来完成判断工作。

条件语句

	类似“如果…就…”的逻辑,就是与计算机沟通的逻辑:条件判断,它的作用是明确地让计算机知道:在什么条件下,该去做什么。

使用方法是

if 条件:
做什么
举一个简单的例子:如果我没吃饱,就再吃一个汉堡。可以写成:

if 我没吃饱:
再吃一个汉堡

经过上面一番操作,PDF格式的文档名称就全部存放在了result列表中,现在一起回顾一下代码:

#导入所需要的库,os 模块提供了非常丰富的方法用来处理文件和目录
import os
#指定文件夹的路径
path='D:/课程/python/资料夹'
#读取文件夹下的文档名称
name=os.listdir(path)
#创建一个空列表
result=[]
#循环判断文档是否为pdf格式,并把pdf文档名存放进新列表中
for i in name:
    if i.endswith('.pdf'):
        result.append(i)

到这里,就成功提取到了所有PDF文档,撒花庆祝~

3. 保存到表格文件

获取到所有文档的名字,最后一步就是把它们存入表格中啦。
再次从模块中来寻找捷径,这回我要为你介绍一个功能强大的模块:pandas。
pandas是一个类似Excel的数据分析模块,提供了大量能使我们快速便捷地处理数据的函数和方法。
照例先来导入它:

import pandas

文档名称目前存放在result列表中,首先需要把它转换为数据框的形式,方便存储进表格,利用DataFrame这个方法来完成,括号中的参数为刚才得到的文档名称数据,将转换后的结果存入result_table变量中:

#将文档名称转换为数据框格式
result_table=pandas.DataFrame(result)

最后将数据框形式的文档写进表格文件。需要借助pandas模块中的一个to_csv方法:

#将获取的文档名称存储进表格文件
result_table.to_csv('pdfname.csv',encoding='utf-8-sig')

方法中的第一个参数是生成的csv表格名称,可以自由指定;第二个参数表示编码格式,utf-8-sig编码可以避免名称有中文时存在乱码。
运行完上面的全部代码后,来看看结果吧~

在目录下新生成了一个pdfname.csv文件,打开它就能看到自动为我们统计的文档名称。

在这里插入图片描述

在实际应用中,你需要提取的文档格式可能是各式各样的。这段代码虽然非常简单,但复用性却很高。

以后遇到类似的工作再也不需要手动复制粘贴了,修改代码中的路径和文件后缀就能一秒搞定。

替换endswith()里的参数就能衍生出更多功能。

#筛选excel文档
endswith('.xls')
#筛选word文档
endswith('.doc')
#筛选mp4文件
endswith('.mp4')

都可以根据你的需求来自己书写和更改。

知识点总结

今天我们在上节课的基础上完成了批量挑选PDF格式文件,提取文档名生成表格文件的任务,整体思路如下:

导入模块
得到文件夹路径
获取文档名称
创建容器存放结果
寻找PDF文档
保存到表格文件
另外了解了两个新的语法知识:

1、列表
列表是一个容器,一个列表需要用中括号[ ]把里面的各种数据框起来,数据之间用逗号隔开。

2、条件语句
类似“如果…就…”的逻辑,就是与计算机沟通的逻辑:条件判断,它能明确地让计算机知道:在什么条件下,该去做什么。用法如下:

if 条件:
去做什么

师承Python学习联盟

如对python语言有兴趣可以微信关注Python学习联盟

希望本次分享能对您有所帮助!!!
最终版权归Python学习联盟所有。

																																																			一个热爱Python的学习崽
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值