python学习笔记_第21天(文件操作–IO 技术)

1544-陈同学

发表文章数:60

热门标签

,
首页 » Python » 正文

使用pickle 序列化

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

pickle.dump(obj, file)  # obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file)  # 从file 读取数据,反序列化成对象
# 将对象序列化到文件中
import pickle

with open(r"pickle.dat", "wb") as f:
    a1 = "python"
    a2 = 123
    a3 = ['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 csv

headers = ["工号", "姓名", "年龄", "地址", "月薪"]
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 os

os.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 模块下常用操作文件的方法
方法名 描述
remove(path) 删除指定的文件
rename(原文件名,新文件名) 重命名文件或目录
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 模块中,关于文件和目录的操作
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) 返回绝对路径
dirname§ 返回目录的路径
getatime(filename) 返回文件的最后访问时间
getmtime(filename) 返回文件的最后修改时间
walk(top,func,arg) 递归方式遍历目录
join(path,*paths) 连接多个path
split(path) 对路径进行分割,以列表形式返回
splitext(path) 从路径中分割文件的扩展名

未经允许不得转载:作者:1544-陈同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《python学习笔记_第21天(文件操作–IO 技术)》 发布于2021-02-06

分享到:
赞(1) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录