使用pickle 序列化

Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。
序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。

pickle.dump(obj, file)  # obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file)  # 从file 读取数据,反序列化成对象
# 将对象序列化到文件中
import picklewith open(r"pickle.dat", "wb") as f:a1 = "python"a2 = 123a3 = ['a', 'b', 'c']pickle.dump(a1, f)pickle.dump(a2, f)pickle.dump(a3, f)# 将获得的数据反序列化成对象
with open(r"pickle.dat", "rb") as f:b1 = pickle.load(f)  # 存入与取出的顺序需一致,先存入的先被取出b2 = pickle.load(f)b3 = pickle.load(f)print(b1)print(b2)print(b3)
print(id(a1))
print(id(b1))  # 反序列化的值与原对象相同,但id不同,是一个新建的对象

执行结果:
python
123
[‘a’, ‘b’, ‘c’]
3019697409200
3019698575024

CSV 文件的操作

与Excel 文件不同,CSV 文件中:值没有类型,所有值都是字符串。不能指定字体颜色等样式,不能指定单元格的宽高,不能合并单元格。
Python 标准库的模块csv 提供了读取和写入csv 格式文件的对象。

# csv.writer 对象写一个csv 文件
import csvheaders = ["工号", "姓名", "年龄", "地址", "月薪"]
rows = [["1002", "李四", 25, "北京", "10000"], ["1003", "王五", 22, "深圳", "8000"]]  # 列表中每行记录为列表是csv文件在对象中的存储方式
with open(r"a.csv", "w",newline='') as f:  # windows下newline默认为换行符,即输入一行数据会默认空一行,可设置newline不换行f_csv = csv.writer(f)  # 创建csv 对象f_csv.writerow(headers)  # 写入一行(标题)f_csv.writerow(["1001", "张三", 18, "上海", "5000"])  # 单行写入数据f_csv.writerows(rows)  # 写入多行(数据)# csv.reader 对象于从csv 文件读取数据
with open(r"a.csv", 'r') as f:f_csv = csv.reader(f)  # 创建csv 对象,它是一个包含所有数据的列表,每一行为一个列表元素存储在列表中print(f_csv)print(list(f_csv))  # [['工号', '姓名', '年龄', '地址', '月薪'], ['1001', '张三', '18', '上海', '5000'], ['1002', '李四', '25', '北京', '10000'], ['1003', '王五', '22', '深圳', '8000']]with open(r"a.csv", 'r') as f:f_csv = csv.reader(f) for row in f_csv:  # 循环打印各行内容print(row)

执行结果:
<_csv.reader object at 0x000002B6D6F3CC18>
[[‘工号’, ‘姓名’, ‘年龄’, ‘地址’, ‘月薪’], [‘1001’, ‘张三’, ‘18’, ‘上海’, ‘5000’], [‘1002’, ‘李四’, ‘25’, ‘北京’, ‘10000’], [‘1003’, ‘王五’, ‘22’, ‘深圳’, ‘8000’]]
[‘工号’, ‘姓名’, ‘年龄’, ‘地址’, ‘月薪’]
[‘1001’, ‘张三’, ‘18’, ‘上海’, ‘5000’]
[‘1002’, ‘李四’, ‘25’, ‘北京’, ‘10000’]
[‘1003’, ‘王五’, ‘22’, ‘深圳’, ‘8000’]

os 和os.path 模块

os 模块可以帮助我们直接对操作系统进行操作。可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等,是系统运维的核心基础。

  • os.system

可直接调用系统的命令

import osos.system('notepad.exe')  # 代码执行完一条关闭所开资源后执行下一条
os.system('regedit')
os.system('cmd')  # 在下方命令窗口中打开终端窗口界面
os.system('ping www.baidu.com')  # 网页链接
  • os.startfile

直接调用可执行文件

# 直接调用可执行的程序/文件
os.startfile(r"C:\Program Files (x86)\MGTVPCC\芒果TV.exe")
  • os 模块-文件和目录操作

  • os 模块下常用操作文件的方法
方法名 描述
stat(path) 返回文件的所有属性
remove(path) 删除指定的文件
rename(原文件名,新文件名) 重命名文件或目录
listdir(path) 返回path 目录下的文件和子目录列表
  • os 模块下关于目录操作的相关方法
方法名 描述
sep 当前操作系统所使用的路径分隔符
linesep 当前操作系统所使用的换行符
getcwd() 返回当前工作目录:current work dir
chdir(path) 把path设为当前工作目录
mkdir(path) 创建目录
makedirs(path1/path2/path3/…) 创建多级目录
rmdir(path) 删除目录(条件:空目录)
removedirs(path1/path2…) 删除多级目录(条件:空目录)
# 测试os 模块中,关于文件和目录的操作
import os# 获取文件和文件夹相关的信息
print(os.name)  # 操作系统:windows->nt linux 和unix->posix
print(os.sep)  # 分隔符:windows->\ linux 和unix->/
print(repr(os.linesep))  # 换行符:windows->\r\n linux-->\n\;repr() 函数将对象转化为供解释器读取的形式。
print(os.stat(r"..\pickle.py"))  # 获取指定文件的信息,../指的是上一级目录# 关于工作目录的操作
print(os.getcwd())  # 返回当前的工作目录
os.chdir("..")  # 改变当前的工作目录为指定目录
os.mkdir("书籍")  # 在已指定的工作目录下创建一个子目录
os.rmdir("书籍")# 创建目录、创建多级目录、删除
os.mkdir("书籍")  # 在当前工作目录下创建一个子目录
os.rmdir("书籍")  # 相对路径都是相对于当前的工作目录
os.makedirs("电影/港台/警匪")
os.rename("电影", "movie")  # 文件/目录重命名
dirs = os.listdir("movie")  # 展示当前目录下的一级子目录
print(dirs) # 一级子目录下的内容不展示
os.removedirs("movie/港台/警匪")  # 只能删除空目录
  • os.path 模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作

方法 描述
isabs(path) 判断path 是否绝对路径
isdir(path) 判断path 是否为目录
isfile(path) 判断path 是否为文件
exists(path) 判断指定路径的文件是否存在
getsize(filename) 返回文件的大小
abspath(path) 返回path或当前工作路径与文件连接起来
dirname(path) 返回目录的路径
getctime(filename) 返回文件的创建时间
getatime(filename) 返回文件的最后访问时间
getmtime(filename) 返回文件的最后修改时间
split(path) 对路径进行分割,以列表形式返回
splitext(path) 从路径中分割文件的扩展名
join(path,*paths) 连接多个path
# 测试os.path 常用方法
import os
import os.path# 获得目录、文件基本信息print(os.path.isabs(r"E:\working\Pycharm_project\Python_primary\Day_21\os_modular"))  # 是否绝对路径,True
print(os.path.isdir("../a.csv"))  # 是否目录,False
print(os.path.isfile("../a.csv"))  # 是否文件,True
print(os.path.exists("../a.csv"))  # 文件是否存在,True
print(os.path.getsize("../a.csv"))  # 文件大小,99
print(os.path.abspath("../a.txt"))  # 输出绝对路径,当文件不存在也不报错
print(os.path.dirname(r"E:\working\Pycharm_project\Python_primary\Day_21\os_modular\a.csv"))  # 输出所在目录# 获得创建时间、访问时间、最后修改时间
print(os.path.getctime("../a.csv"))  # 返回创建时间
print(os.path.getatime("../a.csv"))  # 返回最后访问时间
print(os.path.getmtime("../a.csv"))  # 返回最后修改时间# 对路径进行分割、连接操作
path = os.path.abspath("a.txt")
print(os.path.split(path))  # 返回元组:(目录,文件名.后缀)
print(os.path.splitext(path))  # 返回元组:(路径,.后缀)
print(os.path.join("aa", "bb", "cc"))  # 返回路径:aa\bb\cc

执行结果:
True
False
True
True
99
E:\working\Pycharm_project\Python_primary\Day_21\a.txt
E:\working\Pycharm_project\Python_primary\Day_21\os_modular
1612614575.7759595
1612617824.3058853
1612617823.9624052
(‘E:\\working\\Pycharm_project\\Python_primary\\Day_21\\os_modular’, ‘a.txt’)
(‘E:\\working\\Pycharm_project\\Python_primary\\Day_21\\os_modular\\a’, ‘.txt’)
aa\bb\cc

# 列出指定目录下所有的.py 文件,并输出文件名import osos.chdir('..')
path = os.getcwd()  # 获取当前工作目录
file_list = os.listdir(path)  # 列出子目录和子文件列表,可迭代对象
for filename in file_list:if filename.endswith('py'):print(filename, end="\t")
print('')
file_list2 = [filename2 for filename2 in os.listdir(path) if filename2.endswith(".py")]  # 生成器
for filename2 in file_list2:print(filename2, end="\t")

执行结果:
csv_modular.py pickle.py
csv_modular.py pickle.py

  • walk()递归遍历所有文件和目录

os.walk()方法:
返回一个3 个元素的元组,(dirpath, dirnames, filenames),
dirpath:要列出指定目录的路径
dirnames:目录下的所有文件夹
filenames:目录下的所有文件

# 使用walk()递归遍历所有文件和目录
import osall_files = []  # 文件地址存放列表
os.chdir('..')  # 更改上级目录为当前目录
path = os.getcwd()  # 获取当前工作目录
list_files = os.walk(path)  # ctrl+单击walk,可以查看函数介绍和源代码
for dirpath, dirnames, filenames in list_files:  # os.walk()方法返回一个3个元素的元组,(dirpath,dirnames,filenames)for dir in dirnames:  # 目录下的所有文件夹all_files.append(os.path.join(dirpath, dir))for name in filenames:  # 目录下的所有文件all_files.append(os.path.join(dirpath, name))# 打印子目录和子文件
for file in all_files:print(file)

python学习笔记_第21天(文件操作--IO 技术)相关推荐

  1. python学习笔记:第8天 文件操作

    目录 1. 文件操作介绍 2. 文件操作的几种方式 3. 文件的操作的方法 1. 文件操作介绍 说到操作文件我们肯定会想到流,文件的操作都是通过流来操作的.在python中文件的操作非常简单,并不像J ...

  2. python学习笔记Day4 面向对象编程,文件操作,os模块,代码调试

    一.traceback模块 错误日志可能用到 import tracebackwhile 1: # 捕获异常的顺序按照先父类后子类try:n1 = int(input('请输入一个被除数'))n2 = ...

  3. Python(10)文件操作(IO 技术)、OS模块、递归

    文章目录 文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象 open() 基本的文件写入操作 常用编码介绍 ASCII ISO8859-1 GB2312 GBK GB1 ...

  4. Python学习笔记--day09 函数 模块 (文件、路径操作)

    第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...

  5. Python 学习笔记(2)创建文件夹

    目的:在指定路径下创建一个文件夹: 步骤: 1.先确定路径和创建的文件夹的名字,路径可以在工程下的一个名称为File的文件夹下面,需要新建的文件夹名称为当前的时间: 这边需要使用两个Python的库  ...

  6. python学习笔记9.2-文件及文件夹操作

    本文主要介绍python对文件以及文件夹的操作,主要涉及到文件的创建.读取.文件内容的修改.删除,文件夹的索引.目录的判断等等.此节内容非常重要,是以后编程的基础.python文件夹和文件的操作主要借 ...

  7. python学习必会知识点:对文件操作详解

    python文件读写示例 with open(file_w_path, 'r') as f_r:with open(file_r_path, 'w') as f_w:for line in f_r.r ...

  8. C#学习笔记【十四】—— 文件操作

    14.1文件读写方式 下面的类用于浏览文件系统和执行操作,比如移动,复制和删除文件System.MarshalByRefObject这个是.NET类中用于远程操作的基对象类,它允许在应用程序域之间编组 ...

  9. Python学习笔记_文件读写,目录遍历类封装

    文件读写和目录遍历类的封装. mylib.py 1 # -*- coding:utf-8 -*- 2 3 __author__ = 'huanghuan' 4 5 import os 6 from o ...

最新文章

  1. C语言中字符数组和字符串指针分析
  2. ubuntud——系统备份和恢复
  3. 20150920 DNS服务
  4. 2016年我国研究的超级计算机,盘点2016:我国科研取得的重大成果
  5. kafka安装(版本kafka_2.11-0.11.0.0)
  6. Git之深入解析如何运行自己的Git仓库托管服务器
  7. arcgis 获取json经纬度_干货|ArcGIS的矢量化操作——ArcGis中进行地形图的配准
  8. 里公式后面标号怎么对齐_你若会用Word里F4键,又何须加班到半夜?
  9. layui前端框架弹出框图标整理
  10. python消息队列celery_python异步任务神器celery
  11. Phpstorm-php在线手册配置
  12. 修改 cmd 控制台默认代码页编码
  13. Iphone版音乐计算机,iPhone网易云音乐app的离线音乐导出到电脑
  14. 商标不仅仅是个标记,更是企业的无形资产和价值财富!
  15. 我的U盘终于中招啦:U盘快捷方式病毒
  16. 在职位招聘数据处理中使用Loess回归曲线以及分箱、回归、聚类方法 检查离群点及光滑数据【数据挖掘机器学习】
  17. 猪八戒网站上的骗子为什么这么多
  18. Unable to find libthread_db matching inferior‘s thread library, thread debugging will not be availab
  19. ElasticSearch Docker 部署实例
  20. 操作系统期末复习-第一章:操作系统概论

热门文章

  1. Java POI导出Excel时,合并单元格没有边框的问题
  2. Navicat Premium 查看密码方案
  3. HTML情人节表白代码,给女朋友的电子情书代码,女朋友表白代码
  4. MySQL实现字符串分割split并获取长度
  5. C++学习从基础到高阶(基于黑马程序员教程)
  6. jdbc mysql 解密_数据库配置文件jdbc.properties 实现用户名密码加密
  7. Linux服务器如何做raid1,Linux下制作raid1
  8. node后台生成srt字幕文件
  9. 易仓科技×OceanBase:打造跨境行业全生态链的新零售SaaS
  10. Steam Buff 自动选品 网页版教程