python-文件操作(二)
2021/11/12 17:39:44
本文主要是介绍python-文件操作(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 文件操作
- 文本模式和二进制模式下read()方法的使用
- 文本模式
- 二进制模式
- 文件内光标的移动
- 文件内容的修改
- 文本模式和二进制模式下read()方法的使用
文件操作
文本模式和二进制模式下read()方法的使用
英文字符统一使用一个bytes来表示,中文字符统一使用三个bytes来表示
文本模式
-
格式:read( n ),n为数字
-
文本模式下n表示字符个数
实例如下:
# 在a.txt文件中写入‘python编程’ with open(r'a.txt', 'rt', encoding='utf8') as f: # 查看python print(f.read(6)) # 结果 python with open(r'a.txt', 'rt', encoding='utf8') as f: # 查看‘python编程’,多加两个中文字符,bytes加6 print(f.read(12)) # 结果 python编程 ''' 易错点:在使用read连续在同一个with下操作,读取完文件内容再读取, 光标在文件末尾,读取的内容为空。 ''' # 进行下面操作查看易错点 with open(r'a.txt', 'rt', encoding='utf8') as f: # 查看‘python编程’,多加两个中文字符,bytes加6 print(f.read(3)) print(f.read(3)) print(f.read(3)) print(f.read(3)) # 结果 pyt hon 编程
二进制模式
-
格式:read( n ),n为数字
-
二进制模式下n表示字节个数
实例如下:
# 在a.txt文件中写入‘python编程’ with open(r'a.txt', 'rb') as f: # 查看python,读六个字节 print(f.read(6)) # 再往下读三个字节,输出‘编’ print(f.read(3)) # 再往下读三个字节,解码输出‘程’ print(f.read(3).decode()) with open(r'a.txt', 'rb') as f: # 查看python,读六个字节 print(f.read(6)) # 一个中文字符占三个字节,如果读取的字节数不够,解码输出文本会报错 print(f.read(1).decode()) # UnicodeDecodeError: # 'utf-8' codec can't decode byte 0xe7 in position 0: unexpected end of data
文件内光标的移动
如果想移动光标到指定的位置,来读取或着追加内容需要用到的方法 f.seek( ) , tell( ) 方法查看光标移动了几个字节( b模式 )或字符( t模式 )
-
seek( )方法格式:
- f.seek(offset , whence )
- offset : 光标的偏移量,以字节为单位移动,正数从左到右
- whence : 表示三种模式,0,1,2
-
三种模式详解:
0模式 : 默认的模式 , 支持文本( t )和二进制( b )两种模式 , 以文件开头为参考系
1模式 : 只支持二进制(b)模式 , 以当前位置为参考系
2模式 : 只支持二进制(b)模式 , 以文件末尾为参考系
文本模式实例如下:
# 在a.txt文件中写入‘python编程’ # 文本模式0模式 with open(r'a.txt', 'rt',encoding='utf8') as f: # 查看python,读六个字符 print(f.read(6)) # tell()方法查看光标移动了几个字符 print(f.tell()) # 结果 # python # 6 '''0模式光标从文本开始控制光标移动三个字符,正数从左到右再读取剩下的内容,pyt去掉,输出hon编程''' f.seek(3,0) print(f.read()) # 结果 # hon编程
二进制模式实例如下:
# 在a.txt文件中写入‘python编程’ # 二进制模式 with open(r'a.txt', 'rb') as f: # 输出读取六个字节的内容 print(f.read(6)) # 查看光标移动了几个字节 print(f.tell()) # 结果 # b'python' # 6 # 0模式,光标每次从头开始 # 光标从头移动六个字节,然后再读取三个字节的内容解码,输出‘编’字 with open(r'a.txt', 'rb') as f: f.seek(6, 0) print(f.read(3).decode()) # 结果:编 # 1模式,光标在当前位置 # 光标从头开始,先移动6个字节,到python后 with open(r'a.txt', 'rb') as f: f.seek(6,1) # 保持光标在python字符后不移动 # 输出python后三个字节的内容,’编‘字 print(f.read(3).decode()) # 结果 # 结果:编 # 2模式,光标在末尾 # 光标从文件末尾,反向移动12个字节到文件开始 with open(r'a.txt', 'rb') as f: f.seek(-12,2) # 输出‘python编程’ print(f.read(12).decode()) # 结果 # python编程
文件移动小练习
# 小练习:实现动态查看最新一条日志的效果 import time with open('a.txt', 'rb') as f: # 保持光标在文件末尾,来监视是否添加内容 f.seek(0, 2) while True: line = f.readline() if len(line) == 0: # 没有内容 time.sleep(0.5) else: print(line.decode('utf-8'), end='') '''在a文件内输入内容后保存,才能实时监控'''
文件内容的修改
文件修改的两种方式(底层原理)
- 覆盖原内容
- 新建内容,删除原内容 , 重命名文件替代
实例如下:
# 修改文件内容--覆盖 with open(r'a.txt','r',encoding='utf8')as f: data = f.read() print(data) # print(data) with open(r'a.txt','w',encoding='utf8')as f1: # 用replace方法覆盖 rep_data = data.replace('python','C++') f1.write(rep_data) # 删除原文件,重命名文件替代 import os with open('a.txt', mode='rt', encoding='utf-8') as read_f, \ open('a.txt.swap', mode='wt', encoding='utf-8') as write_f: for line in read_f: write_f.write(line.replace('C++', 'python')) os.remove('a.txt') # 删除原文件 os.rename('a.txt.swap', 'a.txt') # 重命名文件
- 覆盖文件的优缺点:
- 优点 : 不会占用资源 , 直接覆盖原文件的内容达到删除的目的
- 缺点 : 如果没有覆盖原文件 , 底层会保留数据 , 可以通过数据恢复来获取数据不安全
- 删除原文件,重命名新文件优缺点:
- 优点 : 不会导致文件过大而内存溢出
- 缺点 : 在删除原文件前 , 同一个时间 , 复刻了两个文件,占用了资源
持续更新中···
这篇关于python-文件操作(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-14用Python校准市场组合模型:贝叶斯先验的妙用
- 2025-01-14每个数据科学家都必须牢记的10个Python函数
- 2025-01-13python项目部署
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南