【用python进行文件处理与邮件自动化】

一、操作目录/路径

简要介绍下os模块,os是“operating system”的缩写,os模块提供的是各种 Python 程序与操作系统进行交互的接口。路径相关的操作,建议使用os的子模块os.path。

1、路径获取/更改/判断

1.1、获取当前工作目录

在这里插入图片描述
在这里插入图片描述

1.2、更改当前工作目录

在这里插入图片描述

1.3、获取相对路径/绝对路径

在这里插入图片描述

1.4、判断是否绝对路径

在这里插入图片描述

1.5、路径有效性检查

	如果提供的路径不存在,很多Python函数就会崩溃并报错。os.path模块提供了一些函数,用于检测给定的路径是否存在,以及判定是文件还是文件夹。os.path.exists(path):如果path参数所指的文件或文件夹存在,则返回True,否则返回False。

在这里插入图片描述
os.path.isdir(path):如果path参数存在,并且是一个文件夹,则返回True,否则返回False。
在这里插入图片描述
os.path.isfile(path):如果path参数存在,并且是一个文件,则返回True,否则返回False。在这里插入图片描述

2、文件夹操作

2.1、查看文件夹内容

os.listdir(path):返回文件名字符串的列表,包含path参数中的每个文件
在这里插入图片描述
os.walk(path):传入一个文件夹的路径,在for循环语句中使用os.walk()函数,遍历目录树,和range()函数遍历一个范围的数字类似。不同的是,os.walk()在循环的每次迭代中,返回三个值:
1)、当前文件夹称的字符串。
2)、当前文件夹中子文件夹的字符串的列表。
3)、当前文件夹中文件的字符串的列表。
注:当前文件夹,是指for循环当前迭代的文件夹。程序的当前工作目录,不会因为os.walk()而改变。
在这里插入图片描述

2.2、查看文件大小

os.path.getsize(path):返回path参数中文件的字节数(不含子目录)
在这里插入图片描述
查看目录下所有文件的大小(包含子目录)
在这里插入图片描述

2.3、新建文件夹

os.mkdir(),“mkdir”,即“make directory”,用处是“新建一个路径”。需要传入一个类路径参数用以指定新建路径的位置和名称,如果指定路径已存在,则会抛出FileExistsError异常。该函数只能在已有的路径下新建一级路径,否则(即新建多级路径)会抛出FileNotFoundError异常。
在这里插入图片描述在这里插入图片描述
相应地,在需要新建多级路径的场景下,可以使用os.makedirs()来完成任务。函数os.makedirs()执行的是递归创建,若有必要,会分别新建指定路径经过的中间路径,直到最后创建出末端的“叶子路径”。
在这里插入图片描述
在这里插入图片描述

2.4、删除文件夹

os.remove()用于删除文件,如果指定路径是目录而非文件的话,就会抛出IsADirectoryError异常。删除目录应该使用os.rmdir()函数。同样的,对应于os.makedirs(),删除路径操作os.rmdir()也有一个递归删除的函数os.removedirs(),该函数会尝试从最下级目录开始,逐级删除指定的路径,几乎就是一个os.makedirs()的逆过程;一旦遇到非空目录即停止
在这里插入图片描述

二、处理文件

1、文件读取

读写文件的话,建议使用内置函数open(),文件对象可以通过Python内置的open函数得到,完整的语法如下。
open(file,mode=r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)。
调用open()函数将会返回一个File对象。当你需要读取或写入该文件,就可以调用helloFile变量中的File对象的方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、文件写入

需要用“写模式”‘w’和“添加模式”'a’打开一个文件,而不能用读模式打开文件。
“写模式”将覆写原有的文件,从头开始。“添加模式”将在已有文件的末尾添加文本。
在这里插入图片描述
用shelve模块,可以将Python中的变量保存到二进制的shelf文件中。这样,程序就可以从硬盘中恢复变量的数据。
在这里插入图片描述
用pprint.pformat()函数保存变量。pprint.pformat()函数返回要打印的内容的文本字符串,这个字符串既易于阅读,也是语法上正确的Python代码。假如,有一个字典,保存在一个变量中,希望保存这个变量和它的内容,以便将来使用。pprint.pformat()函数将提供一个字符串,我们可以将它写入.py文件。这个文件可以成为我们自己的模块,如果需要使用存储其中的变量,就可以导入它。
在这里插入图片描述

3、文件处理

3.1、文件和文件夹的移动与改名

shutil.move(source, destination):将路径 source 处的文件/文件夹移动到路径destination,并返回新位置的绝对路径的字符串。
1)、如果source和destination是文件夹,且destination已存在,则会将source文件夹下所有内容复制到destination文件夹中。移动。
2)、如果source是文件夹,destination不存在,则会将source文件夹下所有内容复制到destination文件夹中,source原文件夹名称将被替换为destination文件夹名。 移动+重命名
3)、如果source和destination是文件,source处的文件将被移动到destination处的位置,并以destination处的文件名进行命名,移动+重命名。
注意:如果destination中有原来已经存在同名文件,移动后,会被覆写,所以应当特别注意。
在这里插入图片描述

3.2、文件和文件夹的删除

os.unlink(path): 删除path处的文件。
os.rmdir(path): 删除path处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。
shutil.rmtree(path):删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除。
注意:使用时,需要非常小心,避免删错文件,一般在第一次运行时,注释掉这些程序,并加上print()函数来帮助查看是否是想要删除的文件。
在这里插入图片描述
在这里插入图片描述
shutil.rmtree(path)会不可恢复的删除文件和文件夹,用起来会有危险。因此使用第三方的send2trash模块,可以将文件或文件夹发送到计算机的垃圾箱或回收站,而不是永久删除。因程序缺陷而用send2trash 删除的某些你不想删除的东西,稍后可以从垃圾箱恢复。
注意:使用时,需要非常小心,避免删错文件,一般在第一次运行时,注释掉这些程序,并加上print()函数来帮助查看是否是想要删除的文件。
在这里插入图片描述

3.3、文件和文件夹的压缩

为方便传输,常常将文件打包成.zip格式文件。利用zipfile模块中的函数,Python程序可以创建和打开(或解压)zip文件。
zipfile.ZipFile(‘filename.zip’, ‘w’) :以写模式创建一个压缩文件
ZipFile 对象的 write(‘filename’,‘compress_type=zipfile.ZIP_DEFLATED’)方法:如果向write()方法中传入一个路径,Python 就会压缩该路径所指的文件, 将它加到 ZIP 文件中。 如果向write()方法中传入一个字符串,代表要添加的文件名。第二个参数是“压缩类型”参数,告诉计算机用怎样的算法来压缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED(这指定了 deflate 压缩算法,它对各种类型的数据都很有效)。
注意:写模式会擦除zip文件中所有原有的内容。如果只希望将文件添加到原有的zip文件中,就要向zipfile.ZipFile()传入’a’作为第二个参数,以添加模式打开 ZIP 文件。
创建一个new.zip压缩文件,并向其中添加文件
在这里插入图片描述
创建一个example.zip的压缩文件,将animals文件夹下所有文件进行压缩。
在这里插入图片描述
调用zipfile.ZipFile(filename)函数创建一个ZipFile对象(注意大写字母Z和F),filename是要读取zip文件的文件名。
ZipFile对象中的两个常用方法:
namelis()方法,返回zip文件中包含的所有文件和文件夹的字符串列表。
getinfo()方法,返回一个关于特定文件的ZipInfo对象。
ZipInfo对象的两个属性:file_size和compress_size,分别表示原来文件大小和压缩后文件大小。
在这里插入图片描述

3.4、压缩文件的解压缩

ZipFile 对象的 extractall()方法:从zip文件中解压缩所有文件和文件夹,放到当前工作目录中。也可以向extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹, 而不是当前工作目录。如果传递的文件夹名称不存在,就会被创建。
ZipFile 对象的 extract()方法:从zip文件中解压单个文件。也可以向 extract()传递第二个参数, 将文件解压缩到指定的文件夹, 而不是当前工作目录。如果第二个参数指定的文件夹不存在, Python 就会创建它。extract()的返回值是被压缩后文件的绝对路径。
在这里插入图片描述

4、文件查找

对于文件操作,最需要熟练掌握的就是查找文件。前面介绍了使用os.listdir、os.walk方法可以批量列出当前工作目录的全部文件,下面介绍常用于查找特定文件的模块

4.1、使用glob进行文件查找

这里主要是写匹配条件,“”匹配任意个字符,“?”匹配单个字符,也可以用“[]”匹配指定范围内的字符,如[0-9]匹配数字。
glob.glob('[0-9].
‘)可以匹配当前目录下文件名中带有数字的文件。
glob.glob(r’G:*’)可以获取G盘下的所有文件和文件夹,但是它不会进一步列明文件夹下的文件。也就是说,其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件
在这里插入图片描述

4.2、使用fnmatch进行文件查找

fnmatch也是Python自带的库,是专门用来进行文件名匹配的模块,使用它可以完成更为复杂的文件名匹配。它有4个函数,分别是fnmatch、fnmatchcase、filter和translate,其中最常用的是fnmatch函数,其语法如下。
fnmatch.fnmatch(filename,pattern)。pattern表示匹配条件,测试文件名filename是否符合匹配条件。
下面找出目标文件夹里所有结尾带数字的文件
在这里插入图片描述

4.3、使用hashlib进行文件查找

随着计算机中文件越来越多,我们需要找出重复文件。重复文件可能有不同的文件名,不能简单用文件名和文件大小来判断。从科学角度,最简单的办法就是通过MD5来确定两个文件是不是一样的。
Python自带的hashlib库里提供了获取文件MD5值的方法。
在这里插入图片描述

4.4、文件查找练习

练习1、查找特定扩展名的文件并复制移动至指定目录

编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg)。不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中。
在这里插入图片描述
在这里插入图片描述

练习2、查找指定目录下的大文件

一些不需要的、 巨大的文件或文件夹占据了硬盘的空间, 这并不少见。如果你试图释放计算机上的空间, 那么删除不想要的巨大文件效果最好。但首先你必须找到它们。编写一个程序, 遍历一个目录树, 查找特别大的文件或文件夹, 比方说, 超过100MB 的文件(回忆一下,要获得文件的大小,可以使用 os 模块的 os.path.getsize())。将这些文件的绝对路径打印到屏幕上。
方法1:
在这里插入图片描述

方法2:
在这里插入图片描述

三、自动发送邮件

使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间。
Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。
邮件发送需要遵守SMTP协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

1、先导入相关的库和方法

#1 先导入相关的库和方法
import smtplib #导入库
from smtplib import SMTP_SSL #加密邮件内容,防止中途被截获
from email.mime.text import MIMEText #构造邮件的正文
from email.mime.image import MIMEImage #构造邮件的图片
from email.mime.multipart import MIMEMultipart #把邮件的各个部分装在一起,邮件的主体
from email.header import Header #邮件的文件头,标题,收件人

2、设置邮箱域名、发件人邮箱、邮箱授权码、收件人邮箱

host_server = ‘smtp.126.com’
sender_126 = ‘xxxxxx@126.com’
pwd = ‘xxxxxx’
receiver = ‘xxxxxx@qq.com’
在这里插入图片描述

3、构建MIMEMultipart对象代表邮件本身,可以往里面添加文本、图片、附件等

邮件主体
msg = MIMEMultipart()

3.1、设置邮件头部内容

邮件标题
mail_title = ‘python办公自动化邮件’
装入主体
msg[“Subject”] = Header(mail_title,‘utf-8’)
寄件人
msg[“From”] = sender_126
标题
msg[“To”] = Header(“测试邮箱”,‘utf-8’)
在这里插入图片描述

3.2、添加正文文本

邮件的正文内容
mail_content = “您好,这是使用python登录126邮箱发送邮件的测试,python自动化办公练习”
构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
message_text = MIMEText(mail_content,‘plain’,‘utf-8’)
向MIMEMultipart对象中添加文本对象
msg.attach(message_text)
在这里插入图片描述

3.3、添加图片

二进制读取图片
image_data = open(r’python2.jpg’,‘rb’)
设置读取获取的二进制数据
message_image = MIMEImage(image_data.read())
关闭刚才打开的文件
image_data.close()
添加图片文件到邮件信息当中去
message_image.add_header(‘Content-Disposition’, ‘attachment’, filename=‘python2.jpg’)
msg.attach(message_image)

3.4、添加附件(excel表格)

构造附件
atta = MIMEText(open(r’excel_test.xlsx’, ‘rb’).read(), ‘base64’, ‘utf-8’)
设置附件信息
atta[“Content-Disposition”] = ‘attachment; filename=“gps_test.xlsx”’
添加附件到邮件信息当中去
msg.attach(atta)
在这里插入图片描述

4、发送邮件

SSL登录 创建SMTP对象
smtp = SMTP_SSL(host_server)
登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
smtp.login(sender_126,pwd)
发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
smtp.sendmail(sender_126,receiver,msg.as_string())
print(“邮件发送成功”)
关闭SMTP对象
smtp.quit
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb0ab838bf0e4f29bd02737db21be3e6.png
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值