六月学习 Task1 文件自动化处理和邮件批量处理

本文介绍了如何使用Python进行文件自动化处理,包括文件路径操作、文件读写、文件夹创建、文件大小查询等。同时讲解了如何使用`zipfile`模块创建和读取ZIP文件,以及如何利用shutil模块进行文件的复制、移动和删除。此外,还提到了通过shelve模块保存Python变量到二进制文件,以及自动化发送电子邮件的基础知识。
摘要由CSDN通过智能技术生成

1 文件自动化处理
本节要点:如何使用python在硬盘上创建、读取和保存文件。
1.1.1 文件与文件路径
文件的属性:

路径文件名
文件在计算机上的位置该位置的文件的名称

注1:Windows中文件夹名和文件名不区分大小写;
注2:在windows上,路径书写是使用倒斜杠’‘作为文件夹之间的分隔符,而在OS X和Linux上,是使用正斜杠’/'作为它们的路径分隔符。

引入函数来创建文件名称字符串
os.path.join()
函数用于路径拼接文件路径,可以传入多个参数
该函数注意点:
1、从倒数第一个,以‘/’开头的参数开始拼接,之前的参数全部丢弃;
2、以‘/’结尾的,以及参数中间有‘/’的,斜杠仅作为参数的一部分。
e.p.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.1.2 当前工作目录
每个运行在计算机上的程序,都有一个“当前工作目录”。

取得当前路径的字符串改变它
os.getcwd()os.chdir()

在这里插入图片描述
1.1.3 路径操作

绝对路径相对路径
总是从根文件夹开始相对于程序的当前工作目录。

相对路径

  • . :当前目录的缩写
  • 两个句点:父文件夹

绝对路径和相对路径处理函数

os.path.abspath(path):将相对路径转换为绝对路径,将返回参数的绝对路径的字符串;
os.path.isabs(path):判断是否是绝对路径,是返回True,不是则返回False;
在这里插入图片描述

  • os.path.relpath(path,start):返回从start路径到path的相对路径的字符串。如果没提供start,就使用当前工作目录作为开始路径。
  • os.path.dirname(path):返回当前路径的目录名称。
  • os.path.basename(path):返回当前路径的文件名称。

1.1.3.3 路径有效性检查
os.path.exists(path):如果path参数所指的文件或文件夹存在,则返回True,否则返回False。

os.path.isfile(path):如果path参数存在,并且是一个文件,则返回True,否则返回False。

os.path.isdir(path):如果path参数存在,并且是一个文件夹,则返回True,否则返回False。

1.1.4 文件及文件夹操作
1.1.4.1 用os.makedirs()创建新文件夹
创建新文件夹:os.makedirs()
在这里插入图片描述
注:os.makedirs()可以创建所有必要的中间文件夹。

1.1.4.2 查看文件大小和文件夹内容
os.path.getsize(path):返回path参数中文件的字节数。
os.listdir(path):返回文件名字符串的列表,包含path参数中的每个文件。

1.1.6 文件读写过程
读写文件3个步骤:

1.调用open()函数,返回一个File对象。

2.调用File对象的read()write()方法。

3.调用File对象的close()方法,关闭该文件。

1.1.6.1 用open()函数打开文件
在这里插入图片描述
在这里插入图片描述
1.1.6.2 读取文件内容

read():读取文件内容。

readlines():按行读取文件中的内容,取得一个字符串列表,列表中每个字符串是文本中的一行且以\n结束。
在这里插入图片描述
1.1.6.3 写入文件

‘w’‘a’
写模式(覆盖,从头开始)添加模式(添加)

在这里插入图片描述
在这里插入图片描述
注:write()方法不会像print()函数那样,在字符串的末尾自动添加换行字符。必须自己添加该字符。

1.1.6.3 保存变量
1)shelve模块

shelve模块,可以将Python中的变量保存到二进制的shelf文件中。这样,程序就可以从硬盘中恢复变量的数据。
在这里插入图片描述
注:shelf值不必用读模式或写模式打开,因为打开后,既能读又能写。

shelf值有keys()values()方法,返回shelf中键和值的类似列表的值。但是这些方法返回类似列表的值,却不是真正的列表,所以应该将它们传递给list()函数,取得列表的形式。

2)、用pprint.pformat()函数保存变量
如果 有一个字典,保存在一个变量中,希望保存这个变量和它的内容,以便将来使用。***pprint.pformat()函数将提供一个字符串,我们可以将它写入.py文件。***这个文件可以成为我们自己的模块,如果需要使用存储其中的变量,就可以导入它。
在这里插入图片描述
用atom打开
在这里插入图片描述
在这里插入图片描述
1.1.7 练习

1、如果已有的文件以写模式打开,会发生什么?
A:用写的模式打开,将会覆盖原来已有的内容,用添加模式打开,将不会覆盖。

2、read()readlines()方法之间的区别是什么?
read()模式:读取的内容将不分行写出,
readlines()模式:读取的内容将以字符串列表形式表出,分行表出。

综合练习:
一、生成随机的测验试卷文件
假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整问题的次序, 这样每份试卷都是独一无二的, 这让任何人都不能从其他人那里抄袭答案。当然,手工完成这件事又费时又无聊。 好在, 你懂一些 Python。

下面是程序所做的事:

• 创建 35 份不同的测验试卷。

• 为每份试卷创建 50 个多重选择题,次序随机。

• 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机。

• 将测验试卷写到 35 个文本文件中。

• 将答案写到 35 个文本文件中。

这意味着代码需要做下面的事:

• 将州和它们的首府保存在一个字典中。

• 针对测验文本文件和答案文本文件,调用 open()、 write()和 close()。

• 利用 random.shuffle()随机调整问题和多重选项的次序。

1.2 组织文件
1.2.1 shutil模块
shutil(或称为shell工具)模块中包含一些函数,可以在Python程序中复制、移动、改名和删除文件。
要使用shutil的函数,首先需要import shutil

1.2.1.1 复制文件和文件夹

shutil.copy(source, destination):将路径source处的文件复制到路径 destination处的文件夹(source 和 destination 都是字符串),并返回新复制文件绝对路径字符串。

shutil.copy(source, destination):将路径source处的文件复制到路径 destination处的文件夹(source 和 destination 都是字符串),并返回新复制文件绝对路径字符串。

注:destination可以是:

1)、一个文件的名称,则将source文件复制为新名称的destination

2)、一个文件夹,则将source文件复制到destination中
在这里插入图片描述

shutil.copytree(source, destination) :将路径source处的文件夹,包括其包含的文件夹和文件,复制到路径destination处的文件夹,并返回新复制文件夹绝对路径字符串。

注:destination处的文件夹为新创建的文件夹,如已存在,则会报错。
在这里插入图片描述
1.2.1.3 永久删除文件和文件夹

1.2.2 遍历目录树
os.walk(path):传入一个文件夹的路径,在for循环语句中使用os.walk()函数,遍历目录树,和range()函数遍历一个范围的数字类似。不同的是,os.walk()在循环的每次迭代中,返回三个值:

1)当前文件夹称的字符串。

2)当前文件夹中子文件夹的字符串的列表。

3)当前文件夹中文件的字符串的列表。

注:当前文件夹,是指for循环当前迭代的文件夹。程序的当前工作目录,不会因为os.walk()而改变。
在这里插入图片描述
1.2.3 用zipfile模块压缩文件
1.2.3.1 创建和添加到zip文件
zipfile.ZipFile('filename.zip', 'w') :以写模式创建一个压缩文件
ZipFile 对象的 write('filename','compress_type=zipfile.ZIP_DEFLATED')方法:如果向write()方法中传入一个路径,Python 就会压缩该路径所指的文件, 将它加到 ZIP 文件中。 如果向write()方法中传入一个字符串,代表要添加的文件名。第二个参数是“压缩类型”参数,告诉计算机用怎样的算法来压缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED

1.2.3.2 读取zip文件

调用zipfile.ZipFile(filename)函数创建一个ZipFile对象(注意大写字母Z和F),filename是要读取zip文件的文件名。

ZipFile对象中的两个常用方法:

namelis()方法,返回zip文件中包含的所有文件和文件夹的字符串列表。

getinfo()方法,返回一个关于特定文件的ZipInfo对象。

ZipInfo对象的两个属性:file_sizecompress_size,分别表示原来文件大小和压缩后文件大小。

1.2.3.2 读取zip文件
在这里插入图片描述

2 自动发送电子邮件
在这里插入图片描述
在这里插入图片描述

注:1.文件要放在绝对路径
2.出现:smtp出现(500, b’Error: bad syntax’):参见blog.csdn.net/weixin_38428827/article/details/104223207

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值