Python之IO操作

IO操作

IO—(input and output) 输入输出流

IO操作本来是一个很复杂的过程,但是Python以简单著称,提供了一个全局函数open() ,使得IO操作变得非常简单

我们的内存是RAM设备,断电数据丢失,所以我们需要将数据存储到持久化设备中(ROM)中,让其在断电情况下数据仍然存在。IO操作就是将内存中的瞬时数据持久化到磁盘上

一般一个完整的IO操作伴随着:打开文件 - - -> 读取数据 - - -> 数据运算 - - -> 数据的持久化(输出) - - - >关闭资源

读取数据:将数据从一个持久化设备中读取到内存中
输出数据:将数据从内存中保存到磁盘上

open 函数:
我们可以查看帮助文档,了解它的用法 help(open)
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file : 打开什么文件:路径
mode:默认为"r",表示读取文档,可以修改
encoding:编码方式,在cmd中,默认编码是gbk,建议修改为utf-8
errors:在python3中几乎用不到
newline:换行,可以在字符串后直接添加 “\n”,不用这个参数
后面参数不用关注

mode模式的几个参数:


'r'  open for reading (default)
	默认是读取模式
'w'  open for writing, truncating the file first 
	打开为写入模式,会覆盖原数据
'x'  create a new file and open it for writing
	创建一个新文件,然后打开为写入模式
'a'  open for writing, appending to the end of the file if it exists
	在已存在的文件中,添加新数据,不会覆盖原文件
'b'  binary mode 二进制模式
't'  text mode (default) 默认打开为文本模式
'+'  open a disk file for updating (reading and writing)
	更新打开一个磁盘文件(可读可写)

我们在当前目录下创建一个a.txt文件,写入数据
然后通过下面代码可打开

#open函数打开当前工作空间下的a.txt文件
#调用open函数打开一个文件,不在当前目录用绝对路径
#第二个参数表示打开文件的模式
#默认不写,则是"r",表示读取文件
#python默认读取的是文本文档
#文本文档:没有格式的字符文档 .txt文档
#在python中,可以通过命名参数[键值对]直接指定需要的参数

f = open("a.txt","r",encoding = "utf-8")

#调用read方法
msg = f.read()
print(msg)
#调用close关闭io操作
f.close()

“r” 是读取模式
那么我们要给a.txt中写入数据怎么办呢?
我们需要把 “r” 模式改为 “w”
“w” 模式:写入数据,如果文件存在,直接覆盖原有数据;
如果文件不存在,创建一个文件并写入数据

如果不想覆盖原有数据,用 “a” 模式(a : append)

“x” 模式:创建文件并写入数据,注意:文件不能存在,若文件存在,会报错

msg = "\n来陪妲己玩耍呀,主人!"
#注意:写路径时要加"\"
f = open("D:\\python\\day09\\a.txt","a",encoding = "utf-8")
f.write(msg)
f.close()

如果要读取或写入一个字节文件(如:图片、视频),将mode改为 ”rb/rw“ binary 二进制 注意:字节没有编码

文件备份:在这里插入图片描述
文件名字重复,导致文件拷贝的时候出现覆盖问题
解决方案:
使用uuid,会生成一个永不重复的32位16进制的字符串
将这个字符串拼接到文件名称上去

with语句块:

在IO操作时,发现IO一旦打开,必须关闭
关闭操作容易被程序员忘记!!
python为大家提供了 with语句块
在python如果使用with 打开IO,则with结束时
自动调用IO的close关闭
以后的python统一推荐使用with

#用到了as 别名操作
#使用with打开IO,等with结束时,该IO流会自动调用close,关闭IO
with open ("a.txt","r") as f:
	print(f.read())
print("with语句块结束了……")
序列化和反序列化

提供了 pickle 模块
对象概念是一个逻辑单位
将对象真正的以数据形式存储在磁盘上叫序列化
反序列化是将磁盘上真正的数据读取到内存中,对应编程语言的对象

import pickle
#将对象obj对象序列化为字节数据
pickle.dumps(obj)

>>>import pickle as p
>>> str = "xiaozhan啊"
>>> cc = p.dumps(str)
>>> cc
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00\x8c\x0bxiaozhan\xe5\x95\x8a\x94.'
>>> with open("D:\\python\\day09\\c.dat","wb") as f:
	f.write(cc)

	
26
>>> 

将序列化数据反序列化
对象 = pickle.loads(序列化后的字节数据)

>>> p.loads(cc)
'xiaozhan啊'

注意:
dump序列化直接保存,直接和IO配合使用,用load反序列化
dumps 序列化不保存,需要调用IO

import json模块:
	该模块一般用来序列化字典类型的数据
	#序列化字符数据
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值