文件操作
fp = open(文件名,模式,编码集)
fp = 文件io对象(文件句柄)
i : input输入
o : output输出
fp.write() 写入
fp.read() 读取
一.文件的写入操作
fp = open("123.txt",mode="w",encoding="utf-8")
fp.write("写入数据")
fp.close()
二.文件的读取操作
fp = open("123.txt",mode="r",encoding="utf-8")
res = fp.read()
fp.close()
print(res)
三.字节流
字节流:数据传输或者存储的一种二进制格式,多个字节组合在一起就是字节流
b"abc" : b开头的字节流,必须符合ascii编码标准,不能是中文或者其他字符
encode() 编码 将字符串转化为字节流(Bytes流)
decode() 解码 将Bytes流转化为字符串
utf-8编码 一个中文三个字节
四.字节流的写入操作
字节流模式不需要指定任何编码集
res = "初步练习文件操作"
fp = open("123.txt",mode="wb")
fp.write(res)
fp.close()
五.字节流的读取操作
fp = open("123.txt",mode="rb")
res = fp.read()
fp.close()
print(res)
六.复制图片
二进制字节流 -> 图片,音频,视频
#把图片中所有的字节流获取下
pathvar = r"图片的所在路径,选中测试图片鼠标右键选择路径进行复制.png"
fp = open(pathvar,mode="rb")
bytes_data = fp.read()
fp.close()
print(bytes_data)
#把获取到的文件存到另一个文件中,形成图片文件
pathvar = r"第二个图片.png"
fp = open(pathvar,mode="wb")
fp.write(bytes_data)
fp.close()
#直接在系统下查看新的图片
补充:复制图片,使用with语法进行优化[可以实现文件关闭功能]
#知识点:as起别名
pathver1 = r"路径.png"
pathver2 = r"路径.gif"
#组合简写
with open(pathver1,mode="rb") as f1 , open(pathver2,mode="wb") as f2:
bytes_data = f1.read()
fp2.write(bytes_data)
七,文件的相关函数
刷新缓冲区flush
当文件关闭的时候自动刷新缓冲区
当整个程序运行结束的时候自动刷新缓冲区
当缓冲区写满,会自动刷新缓冲区
手动刷新缓冲区(可以不通过关闭,直接手动刷新,直接把内容写入文件中)
readable() 判断文件是否可读
writeable() 判断文件是否可写
readline() 读取一行内容
括号内的参数不写,默认读取当行(注意 是在文件内)
参数>当前行总个数 -> 按照当前行读取
参数<当前行总个数 -> 按照参数个数读取
#注意:
1用该函数读取所有内容
先读取一行,如果不为同,开始循环,(循环内再读取一行)
2直接遍历fp(可迭代对象) for i in fp:
readlines() 将文件中的内容按照换行读取到列表当中
#数据清洗,遍历列表,用strip()去掉两边的空白符.再重新把数据追加回列表中
writelines() 将内容是字符串的可迭代性数据写入文件中, 参数:内容为字符串类型的可迭代性数据
#注意:可迭代性数据里面的内容必须是字符串
truncate() 把要截取的字符串提取出来,然后清空内容,将提取出来的字符串,重新写入文件中(字节)
截取 -> 清空 -> 重写
文件的扩展模式
#utf-8 编码格式下默认一个中文三个字节,一个英文或者一个符号,占用一个字节
read=() 读取字符的个数(里面的参数代表字符的个数)
seek() 调整指针的位置(里面的参数代表字节的个数)
seek(0) 移动到开头
seek(0,2) 移动到结尾 ,固定的语法
注意:有可能移动光标移动到字符中的一个字节里,出现无效的开始字节,出现报错
tell() 当前光标左侧所有的字节数(返回字节数)
r+ 先读后写[指针光标默认开头,不能自动创建新文件]
#注意:移动光标位置
r+先写后读
先写,为了防止覆盖原内容,直接把光标放到最后
w+ 可读可写 [清空重写,文件不存在自动创建]
a+ 可读可写 [末尾追加,文件不存在自动创建]
如果要读需要移动光标在开头
a+,r+区分
a+ 即使移动光标,也强制在最后追加