序列化和反序列化
序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的串行化数据转化成对象。
Python中,一切皆对象,对象本质上就是一个存储数据的内存块。有时候,我们需要将内存块的数据保存到硬盘上,或者通过网络传输到其他计算机上。这时候就需要对象的序列化和反序列化。对象的序列化机制广泛的应用在分布式、并行系统上。
pickle.dump(obj,file),obj就是要被序列化的对象,file指的是存储的文件
pickle.load(file),从file读取数据,反序列化成对象
CSV文件操作
csv是(Comma-Separated Values)逗号分隔文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。
与Excel文件不同,CSV文件中:
- 值没有类型,所有值都是字符串
- 不能指定字体颜色等样式
- 不能指定单元格的宽高,不能合并单元格
- 没有多个工作表
- 不能嵌入图像图表
csv.reader对象和csv文件读取
import csv
with open(r"csv_demo.csv", encoding="utf-8") as f:
csv_demo = csv.reader(f) # 创建csv对象,它是一个包含所有数据的列表,每一行为一个元素
headers = next(csv_demo) # 获取列表对象,包含标题行的信息
print(headers)
for row in csv_demo:
print(row)
csv.writer对象和csv文件写入
import csv
headers = ["学号","姓名","年龄","地址"]
rows = [("1001","saber",18,"理想乡"),("1002","archer",19,"冬木市")]
with open(r"b.csv","w") as b:
b_csv = csv.writer(b) #创建csv对象
b_csv.writerow(headers) #写入一行(标题)
b_csv.writerows(rows) #写入多行(数据)
os和os.path模块
os模块可以帮助我们直接对操作系统进行操作。可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等。
os.system可以帮助我们直接调用系统命令
# 调用windows系统的记事本程序
import os
os.system("notepad.exe")
# 调用windows系统的ping命令
import os
os.system("ping www.baidu.com")
# 运行微信
import os
os.startfile(r"E:\WeChat\WeChat.exe")
os模块下常用操作文件的方法
方法名 | 描述 |
---|---|
remove(path) | 删除指定的文件 |
rename(src,dest) | 重命名文件或目录 |
stat(path) | 返回文件的所有属性 |
listdir(path) | 返回path目录下的文件和目录列表 |
os模块下关于目录操作相关方法
方法名 | 描述 |
---|---|
mkdir(path) | 创建目录 |
makedirs(path1/path2/path3/...) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2...) | 删除多级目录 |
getcwd() | 返回当前工作目录:current work dir |
chdir(path) | 把path设为当前工作目录 |
walk() | 遍历目录树 |
sep | 当前操作系统所使用的路径分隔符 |
os.path模块提供了目录相关操作
方法 | 描述 |
---|---|
isabs(path) | 判断path是否绝对路径 |
isdir(path) | 判断path是否为目录 |
isfile(path) | 判断path是否为文件 |
exists(path) | 判断指定路径的文件是否存在 |
getsize(filename) | 返回文件的大小 |
abspath(path) | 返回绝对路径 |
dirname(p) | 返回目录的路径 |
getatime(filename) | 返回文件的最后访问时间 |
getmtime(filename) | 返回文件的最后修改时间 |
walk(top,func,arg) | 递归方式遍历目录 |
join(path,*paths) | 连接多个path |
split(path) | 对路径进行分割,以列表形式返回 |
splitext(path) | 从路径中分割文件的扩展名 |
# 列出当前文件夹下的所有py文件
import os.path
path = os.getcwd()
file_list = os.listdir(path) # 列出子目录和子文件
print(file_list)
print("=========================="*3)
for filename in file_list:
pos = filename.rfind(".")
if filename[pos+1:]=="py":
print(filename,end="\t")
print("\n========================================")
file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py")]
for filename in file_list2:
print(filename,end="\t")
walk()递归遍历所有文件和目录
os.walk()方法思一个简单医用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
top:要遍历的目录
topdown:可选,True,先遍历top目录,再遍历子目录
返回三元组(root、dirs、files):
root:当前正在遍历的文件夹本身
dirs:一个列表,该文件夹中所有的目录的名字
files:一个列表,该文件夹中所有的文件的名字
import os
path = os.getcwd()
list_file = os.walk(path,topdown=False)
for root,dirs,files in list_file:
for name in files:
print(os.path.join(root,name))
for name in dirs:
print(os.path.join(root,name))
shutil模块
shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等,还可以做文件和文件夹的压缩、解压缩操作。
os模块提供了对目录或文件的一般操作。shutil模块作为补充,提供了移动、复制、压缩、解压等操作。
import shutil
shutil.copyfile("a.txt","a_copy.txt")
# 递归拷贝文件夹内容
# D:/B不存在才能用,将b下的所有不是.html和.htm后缀的复制到B下
shutil.copytree("D:/a/b","D:/B",ignore=shutil.ignore_patterns("*.html","*.htm"))