Python学习日志
RBHGO的主页欢迎关注
温馨提示:创作不易,如有转载,注明出处,感谢配合~
目录
文章目录
-
- Python学习日志
-
- 目录
-
- 前言
- 进入正题
- Python学习日志12课 - 办公自动化
-
- (1).读写文本文件
-
- 读文件
- 读二进制文件
- 读取文件(计算MD5哈希码)
- 写文件
- 文件复制
- (2).Python操作CSV文档
-
- 读csv文件
- 写csv文件
- (3).Python操作Excel文档
-
- 读写`.xls`文件
- Python中的时间
- 读写`.xlsx`文件
- Excel生成统计图表
- (4).Python操作word文档
-
- 修改(创建)样本文章
- (5).Python操作PDF文档
-
- 创建PDF文件
- 基本操作
- 加密
- 加水印
- 总结
前言
上一次我们主要分享的是面对对象的编程,确实是不太好理解,这需要时间的沉淀。在这里还是和大家稍微在提一下重要的地方,首先明白核心的概念类、对象,类是创建对象的模板,对象是可以接受消息的实体,另外要注意的是对象的要素;再就是三步走(定义类、创建对象、给对象发消息),三步走中以定义类的数据抽象和行为抽象最为难做;最后了解三大(四大)支柱,封装、继承、多态、(抽象)。虽然看起来不多的内容,其实可操作性和信息量是巨大的,希望大家都有所感悟,早日能得心应手的运用面对对象编程吧。
进入正题
这篇想和大家分享一些不烧脑的,这也是比较有用的,就是用Python实现办公自动化。其实办公自动化写起来也不是说简单,只是至少你写出来的程序复用性很高,Python实现办公自动化也不敢说很强大,至少他完成了’初心‘,就是帮我们解决重复的劳动步骤,让过程变得愉悦一点。
温馨提示:
以下操作都是基于不使用Python数据分析的神器之一 —> 名为
pandas
的三方库,这个后面的时候再分享。
Python学习日志12课 - 办公自动化
实际开发中常常会遇到对数据进行持久化的场景,所谓持久化是指将数据从无法长久保存数据的存储介质(通常是内存)转移到可以长久保存数据的存储介质(通常是硬盘)中。实现数据持久化最直接简单的方式就是通过文件系统将数据保存到文件中。用户只需要记住数据被写入到了哪个文件中,我们可以非常方便的通过文件来读写数据,再使用文件系统保存数据。
在Python中要实现文件操作是非常简单的。我们可以使用Python内置的open
函数来打开文件,在使用open
函数时,我们可以通过函数的参数指定文件名、操作模式和字符编码等信息,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件或二进制文件)以及做什么样的操作(读、写或追加),具体如下表所示。
操作(mode= ) | 作用效果 |
---|---|
'r' |
读取 (默认) |
'b' |
二进制模式(读写分别:rb , wb ) |
't' |
文本模式(默认) |
'+' |
更新(既可以读又可以写)截断w+,前面加r+,追加a+ |
'x' |
写入,如果文件已经存在会产生异常 |
'w' |
写入(文件有内容会先截断之前的内容),无文件会创建 |
'a' |
追加,将内容写入到已有文件内容的末尾,无文件会创建 |
温馨提示:在使用
open
函数时,如果打开的文件是字符文件(文本文件),可以通过encoding
参数来指定读写文件使用的字符编码。
(1).读写文本文件
读文件
file = open(file='C:/Users/RBHGO/登高.txt', mode='r', encoding='utf-8')# 如果读不到数据,read方法会返回None# 读文件一部分一部分的读对磁盘比较友好
try:data = file.read(16)while data:print(data, end='')data = file.read(16)# 在使用完之后,要释放掉空间
finally:file.close()
除了使用文件对象的read
方法读取文件之外,还可以使用for-in
循环逐行读取或者用readlines
方法将文件按行读取到一个列表容器中,我提供一种方法,大家有兴趣的话可以试一试其他方法。
温馨提示:很多报错,其实大部分都是路径写错,所以一定要搞清楚文件路径在进行读取,而且建议路径上最好不要有中文名。
读二进制文件
这里顺便分享了如和查看文件的长度(大小),不建议直接使用len()
的原因是和为什么要一部分一部分文件是一样的,避免文件过大造成麻烦,和损失。
from io import SEEK_END, SEEK_SET# 读二进制(字节)文件
file = open(file='C:/Users/RBHGO/66.jpg', mode='rb')
# 移动文件指针从头到尾,seek可以查看文件大小
# 或者也可以写file.seek(0, 2)
file.seek(0, SEEK_END)
# tell告诉指针移动的字节数
print(file.tell())
# 将文件指针移动到文件最开始的位置
# file.seek(0, 0)
file.seek(0, SEEK_SET)# print(len(file.read())),当读一个长度较大的文件时,这个方法就不如上面的方法
try:data = file.read(512)while data:print(data, end='')data = file.read(512)
finally:file.close()
读取文件(计算MD5哈希码)
不知道大家下载文件的时候有没有记得,下载那一排内容中都会有一行编码,它的作用就是防伪,如果下下来的文件的编码与网址上的一样说明没问题,相当于身份验证,只是大部分时候我们都懒得验证。
""" 读取Python官方解释器文件,计算MD5哈希码(签名、指纹、摘要)MD5 Sum文件的 MD5码 ---> 哈希算法(签名、指纹) 以前用MD5码 ---> 现在用SHA-256码(比之前长一倍)Author: RBHGO Declaration: Mia San Mia ~~~ """
from hashlib import md5
hasher = md5()
# hasher2 = sha256()
file = open('C:/language/python-3.9.6-amd64.exe', 'rb')
try:data = file.read(512)while data:# 更新MD5对象数据hasher.update(data)data = file.read(512)
finally:file.close()
# 获得十六进制形式的MD5哈希摘要
print(hasher.hexdigest())
写文件
用'w'
创建一个文件,'w'
的作用是写入如果文件有内容会先截断之前的内容,无文件会创建一个文件,如果写入的是二进制文件就用'wb'
。
""" with -> 上下文语法 -> 进入和离开with的时候会自动执行某些操作 下面的写法在离开with上下文的时候,会自动执行file对象的close()方法 'w'是写文件,有文件就替换文件内容,没有文件创建新文件 'a'将文件指针移动到原有文件的末尾再写入新内容,若文件没有也会创建 """with open(file='resources/小雨康桥的皮燕子.txt', mode='w', encoding='utf-8') as file:file.write('我想做燕子\n')file.write('只需简单思想\n')file.write('只求风中流浪\n')file.write('我想做树\n')file.write('不长六腑五脏\n')file.write('不会寸断肝肠\n')file.write('我做不成燕子\n ')file.write('所以我飞不过感情的壤\n')file.write('我做不成树\n')file.write('因此也撑不破伤心的网\n')
想在文件原有的内容后加上新内容可以使用'a'
,它的作用就是追加,将内容写入到已有文件内容的末尾,无文件也会创建一个文件。
with open('resources/小雨康桥的皮燕子.txt', mode='a', encoding='utf-8') as file:# 不想用'a'追加的话,可以用'r+'加上移动指针到结尾来追加file.seek(0, 2)file.write('来生做燕子吧\n')file.write('随意找棵树休息翅膀\n ')file.write('然后淡然飞向远方\n')file.write('来生做树吧\n')file.write('当枝头燕子飞走时\n')file.write('再不去留念的张望\n')
文件复制
def file_copy(source_file, target_file):"""文件拷贝"""with open(source_file, mode='rb') as source:with open(target_file, mode='wb') as target:data = source.read(512)while data:target.write(data)data = source.read(512)if __name__ == '__main__':file_copy('resources/小雨康桥的皮燕子.txt','C:/Users/RBHGO/Desktop/小雨康桥的皮燕子.txt')
(2).Python操作CSV文档
CSV(Comma Separated Values)全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据交换。
CSV文件有以下特点:
- 纯文本,使用某种字符集(如ASCII、Unicode、GB2312)等);
- 由一条条的记录组成(典型的是每行一条记录);
- 每条记录被分隔符(如逗号、分号、制表符等)分隔为字段(列);
- 每条记录都有同样的字段序列。
读csv文件
# 自己做拆分
with open('resources/2018年北京积分落户数据.csv', encoding='utf-8') as file:content = file.readline()while content:values = content.replace('\n', '').split(',')print(values)content = file.readline()
还有一种方法,是通过csv
模块的reader
函数可以创建出csvreader
对象,该对象是一个迭代器,可以通过next
函数或for-in
循环读取到文件中的数据。
# 使用CSV模块
import csv
# 如果用utf-8编码,这里可能会有问题!!!所以编码设置为utf-8-sig,带签名的utf-8
with open('resources/2018年北京积分落户数据.csv', encoding='utf-8-sig') as file:# 参数delimiter -> 设置分割符(默认是逗号)# 如果文件内不是逗号分隔,如是#号分隔时:reader = csv.reader(file, delimeter='#')# 参数quotechar -> 包裹字符串的符号(默认是英文的双引号) -> 去掉字符串里的多余符号reader = csv.reader(file)for row in reader:print(row)
写csv文件
使用Python标准库中的csv
模块,该模块的writer
函数会返回一个csvwriter
对象,通过该对象的writerow
或writerows
方法就可以将数据写入到CSV文件中
""" 写CSV文件 writerow方法的参数是一个列表或元组(代表一行中所有的数据,默认用逗号分隔)Author: RBHGO Declaration: Mia San Mia ~~~ """
import csvwith open('resources/temperature.txt', encoding='utf-8') as file1:with open(