赞
踩
""" 语法: fp = open(文件,模式,编码集) fp => 文件的io对象 (文件句柄) i => input 输入 o => outpur 输出 fp.read() 读取文件内容 fp.write() 写入文件的内容 """ # 1.文件的写入操作 # (1) 打开文件 fp = open("ceshi1.txt",mode="w",encoding="utf-8")# 打开冰箱门 # (2) 写入内容 fp.write("把大象怼进去") # 把大象怼进去 # (3) 关闭文件 fp.close() # 把冰箱门关上 # 2.文件的读取操作 # (1) 打开文件 fp = open("ceshi1.txt",mode="r",encoding="utf-8") # (2) 读取内容 res = fp.read() # (3) 关闭文件 fp.close() print(res)
""" 二进制字节流:`用于传输数据或者存储数据的一种数据格式 b"abc" b开头的字节流要求数据只能是ascii编码中的字符,不能是中文 # 将字符串和字节流(Bytes流)类型进行转换 (参数写成转化的字符编码格式) #encode() 编码 将字符串转化为字节流(Bytes流) #decode() 解码 将Bytes流转化为字符串 """ data = b"abc" # bytes 字节流 data = "中文".encode("utf-8") # b'\xe4\xb8\xad\xe6\x96\x87' print(data,type(data)) res = data.decode("utf-8") print(res,type(res)) # utf-8下 一个中文占用3个字节 data = "中文".encode("utf-8") # 计算字节总大小 print(len(data)) # 6 # 把中字这个字节流进行反解恢复成原来中的字符 "中" res = b"\xe4\xb8\xad".decode() print(res) # 1.文件存储二进制的字节流 """如果存储的是二进制字节流,指定模式wb,不要指定encoding编码集,如指定会报错""" fp = open("ceshi2.txt",mode="wb") strvar = "红鲤鱼绿鲤鱼与驴".encode("utf-8") fp.write(strvar) fp.close() # 2.文件读取二进制的字节流 fp = open("ceshi2.txt",mode="rb") res = fp.read() fp.close() print(res) print(res.decode())
"""所有的图片,音频,视频都需要通过二进制字节流来进行存储传输."""
# 先把原文件的二进制字节流读取出来
# 相对路径找 '集合.png' 相对于当前'3.py'这个文件
# fp = open("集合.png",mode="rb")
# 绝对路径找集合.png 从最底层一级一级往上找
fp = open(r"D:\python32_python\day01\集合.png",mode="rb")
res = fp.read()
fp.close()
# 计算文件中的字节个数 => 文件大小
print(len(res))
# 在把二进制字节流写入到另外一个文件中,相当于复制
fp = open("集合2.png",mode="wb")
fp.write(res)
fp.close()
#打开模式 w write 写入模式 文件不存在则创建文件,存在的话则打开清空内容,并且将文件指针放在文件的开头 r read 读取模式 文件不存在则报错! 存在的话则打开文件,并且将文件指针放在文件的开头 a append 追加模式 文件不存在则创建文件,存在的话则打开文件,*并且将文件指针放在文件的末尾* x xor 异或模式 (了解,基本不使用) 文件已存在则报错! 不存在的话则创建文件,将文件指针放在文件的开头 #扩展模式 (配合打开模式的辅助模式,自己单独不能使用) + plus 增强模式(可以让文件具有读写功能) b bytes bytes模式(二进制字节流) #模式一共16种 w,w+,wb,wb+ r,r+,rb,rb+ a,a+,ab,ab+ x,x+,xb,xb+
"""
# (utf-8编码格式下 默认一个中文三个字节 一个英文或符号 占用一个字节)
#read() 功能: 读取字符的个数(里面的参数代表字符个数)
注意:从当前光标往右边读
#seek() 功能: 调整指针的位置(里面的参数代表字节个数)
seek(0) 把光标移动到文件的开头
seek(0,2) 把光标移动到文件的末尾
#tell() 功能: 当前光标左侧所有的字节数(返回字节数)
"""
fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 先读
res = fp.read()
# 在写, 此时光标已在文件最后面,这时再写就是追加在最后
fp.write("ab")
# 在读
fp.seek(0) # 通过seek把光标移动到开头
print(fp.read())
fp.close()
fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 移动光标到最后,否则r模式下,原字符会被覆盖
fp.seek(0,2)
# 先写
fp.write("cd")
# 把光标移动到文件的开头
fp.seek(0)
# 在读
res = fp.read()
print(res)
fp.close()
fp = open("ceshi4.txt",mode="w+",encoding="utf-8")
fp.write("abc")
fp.seek(0)
print(fp.read())
fp.close()
fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.write("def")
# 读内容
fp.seek(0)
print(fp.read())
fp.close()
"""
r+模式基于当前光标所在位置进行写入覆盖
a+模式会强制把光标放到文件末尾进行追加写入
"""
# fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.seek(3) # 从头数 3个字节的位置
# fp.write("zxc") # 模式会强制把光标放到文件末尾进行追加写入
print(fp.read())
fp.close()
seek,tell,read
的使用fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp.seek(4)
# tell 返回当前光标左边所有内容的字节数
res = fp.tell()
print(res) # 4
# 在r+模式下 read(2) 代表读取2个字符
# 在rb模式下 read(2) 代表读取2个字节
fp.read(2) # 当前光标往右所有的字符内容
print(fp.tell()) # 6
fp.close()
fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
fp.seek(3)
print(fp.read()) # 会报错
fp.close()
# print("你".encode())
# b'\xe4\xbd\xa0'
with
语法 自动实现文件关闭操作(重要)# 方法一.读取二进制字节流
"""
with open("集合2.png",mode="rb") as fp:
res = fp.read()
with open("集合3.png",mode="wb") as fp:
fp.write(res)
"""
# 方法二.继续简化
with open("集合3.png",mode="rb") as fp1 , open("集合4.png",mode="wb") as fp2 :
res = fp1.read()
fp2.write(res)
#字符:无论是什么语言,独立的一个文字就是一个字符 #存储单位: Byte字节 bit:位 1B = 8b B:字节, 1Byte = 8bit #字符大小: 无论何种字符集:英文和数字都是一个字节,汉字,韩文,日文等亚洲文字采用多个字节存储 GB系列编码:存储一个汉字使用2个字节 (国标编码:例如: gbk2312 ) UTF系列编码:存储一个汉字使用3个字节(国际通用:例如: utf-8 ) #字符编码种类: (把编码看成一个密码本,每一个字符在计算机中都是个二进制) 英文原始编码: ASCII码 -> 最早的字符编码格式->仅支持英文和特定的符号 中文编码: GB2312 : 包含5000个常用汉字的标准 GB18030: 升级版本的标准,大概15000个汉字 GBK : 包含所有中文汉字的编码(推荐) BIG5 : 繁体中文编码 万国码: unicode 包含世界上所有的文字(无论什么字符 都按照4个字节表示) utf-8 可变长的unicode编码
# 刷新缓冲区 flush # 当文件关闭的时候自动刷新缓冲区 # 当整个程序运行结束的时候自动刷新缓冲区 # 当缓冲区写满了 会自动刷新缓冲区 # 手动刷新缓冲区 fp = open("ceshi1.txt",mode="a",encoding="utf-8") fp.write("abc") # 手动刷新缓冲区,直接把内容写入到文件 fp.flush() while True: # 下面的close() 不会执行,会导致 abc 无法写入,需要手动刷新缓冲区 pass fp.close()
readable()
功能: 判断文件对象是否可读writable()
功能: 判断文件对象是否可写"""fp这个对象本身是迭代器,可以把文件中的内容按照换行,一行一行遍历出来"""
fp = open("ceshi1.txt",mode="r",encoding="utf-8")
#readable() 功能: 判断文件对象是否可读
print(fp.readable()) # True
#writable() 功能: 判断文件对象是否可写
print(fp.writable()) # False
# 遍历fp文件对象
for i in fp:
print(i)
readline()
功能: 读取一行文件内容with open("ceshi1.txt",mode="r",encoding="utf-8") as fp: res = fp.readline() # 返回 读取的内容,读取不到是为 None print(res) res = fp.readline() print(res) res = fp.readline() print(res) res = fp.readline() print(res) # (1)一次把所有内容都读取出来 with open("ceshi1.txt",mode="r",encoding="utf-8") as fp: # 先读取一行 res = fp.readline() # 判断是不是空,不是空在循环 while res: print(res) # 在读取一行,放到循环中判断. res = fp.readline() # (2)注意点:readline(读取的字符数) with open("ceshi1.txt",mode="r",encoding="utf-8") as fp: """ 读取的字符数量 > 实际当前行字符数量的时候 => 按照当前行读取 读取的字符数量 < 实际当前行字符数量的时候 => 按照实际数量来读 """ res = fp.readline(300) print(res) # 最多只读取这一行的内容
readlines()
功能:将文件中的内容按照换行读取到列表当中lst_new = []
with open("ceshi1.txt",mode="r+",encoding="utf-8") as fp:
lst = fp.readlines()
for i in lst:
lst_new.append(i.strip()) # 取出读取到的字符两边的空白字符
print(lst_new)
writelines()
功能:将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据lst = ['床前明月光', '疑是地上霜', '举头望明月', '低头想家乡'] with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp: fp.writelines(lst) # ### 实现效果:加入换行效果,并且插入一句话: 遥知不是雪, 插在低头想家乡的前面 lst_new = [] # 先把内容插入到原列表中 lst.insert(-1,"遥知不是雪") # 循环原列表,把每一个元素拼接\n , 放到新列表 for i in lst: lst_new.append(i + "\n") print(lst_new) # 把新列表中的每行内容插入到文件中 with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp: fp.writelines(lst_new) # 注意点,内容必须是字符串,不能是整型 lst = [1,2,3] with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp: fp.writelines(lst) # 整型报错
truncate()
功能: 把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中 (字节)# 最后只保留 3个字节数,把剩余的内容全部清除
with open("ceshi2.txt",mode="r+",encoding="utf-8") as fp:
fp.truncate(3) # 字节数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。