文件操作
-
fp 文件io对象
fp = open(文件名,模式,编码集)
i : input 输入
o : output 输出
fp.read() 读文件内容
fp.write() 写文件内容
模式
w => write
r => read
a => append
文件可以存储两种数据格式:
(1) 字符串
(2) 字节流
-
如何写入文件
-
打开文件
fp = open("lianxi1.txt",mode="w",encoding="utf-8") # 打开冰箱门
-
写入内容
fp.write("大象在家没?") # 把大象踹进去
-
关闭文件
fp.close() # 关上冰箱门
-
如何读取文件
<变量名> = open(<文件名> , <打开模式>)
文件句柄 文件路径和名称 文本or二进制
源文件同目录可胜路径 读 or 写
-
打开文件
fp = open("lianxi1.txt",mode="r",encoding="utf-8")
-
读取内容
res = fp.read()
-
关闭文件
fp.close()
print(res)
.read (size = -1) | 读入全部内容,如果给出参数,读入前size的长度 | s = f.read(2) 中国 |
---|
.readline(size = -1) | 读入一行内容,如果给出参数,读入改行前size的长度 | s= f.readline() 中国是一个伟大的国家 |
.readlines(hint=-1) | 读入文件所有行,以每行为元素形成列表,给参数读入前hont行 | s = f.readlines() [‘中国是一个伟大的国家’] |
-
文件的打开模式
‘r’ | 只读模式,默认值,如果文件不存在,返回FileNotFoundError |
---|
‘w’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值 |
‘+’ | 与r/w//x/a一同使用,在原功能基础上增加同时读写功能 |
-
字节流的概念
字节流是用来数据传输和存储的一种数据格式,实际上就是二进制;
多个字节放在一起是字节流
多个字符放在一起是字符串
表示: 在字符串的开头放一个b
例如: b"123" , b"abc" [必须归属于ascii编码才可以的,字符串前面加b]
error: b"你好" 错误的
str_bytes = b"abc"
print(str_bytes , type(str_bytes)) # b'abc' <class 'bytes'>
-
将字符串和字节流(Bytes流)类型进行转换 (参数写成转化的字符编码格式)
-
encode() 编码 将字符串转化为字节流(Bytes流)
-
decode() 解码 将Bytes流转化为字符串
strvar = "你好".encode("utf-8")
print(strvar , type(strvar))
res = b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode("utf-8")
print(res , type(res))
res = b"\xe5\xa5\xbd".decode("utf-8")
print(res , type(res))
-
存储二进制的字节流
-
写入二进制字节流
无需重新指定encoding,加了反而报错
fp = open("lianxi2.txt",mode="wb")
fp.write( "你好".encode("utf-8") )
fp.close()
-
读取二进制字节流
fp = open("lianxi2.txt",mode="rb")
data = fp.read()
fp.close()
print(data.decode())
-
如何复制一张图片?
-
读取原图片中的二进制字节流
fp = open(r"E:\python35\day9\集合.png",mode="rb")
data = fp.read()
fp.close()
print(data)
-
把字节流写入到新的文件中
fp = open("集合4.gif",mode="wb")
fp.write(data)
fp.close()
-
with 语法 => 可以自动完成close操作
with open(r"E:\python35\day9\集合.png",mode="rb") as fp:
data = fp.read()
with open(r"E:\python35\day9\集合123.png",mode="wb") as fp:
fp.write(data)
升级
with open(r"E:\python35\day9\集合.png",mode="rb") as fp1,open(r"E:\python35\day9\集合123.png",mode="wb") as fp2:
data = fp1.read()
fp2.write(data)
文件的理解
-
文本文件和二进制文件知识文件的展示方式
-
本质上, 所有文件都是二进制形式存储
-
形式上, 所有文件采用两种方式展示
-
由单一特定编码组成的文件, 如utf - 8 编码
-
由于存在编码,也被看成是存储着的长字符串
-
适用于例如: txt文件 py文件
-
直接由比特0和1组成, 没有统一字符编码
-
一般存在二进制0和1组成,没有统一字符编码
-
适用于例如:png文件 avi文件
f.txt文件保存: “中国是一个伟大的国家”
# 文本形式打开文件
tf = open("f.txt", "rt")
print(tf.readline())
tf.close()
# 中国是一个伟大的国家
# 二进制形式打开文件
bf = open("f.txt","rb")
print(bf.readline())
bf.close()