一:文件的打开模式
了解过字符编码都知道,文件都是以某一种标准编码成二进制存在硬盘里的,在文件的默认打开模式下f = open('a.txt','rt',encoding='utf-8') 其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符;如果是以b模式打开文件的话,open方法不会对操作系统返回的二进制数据作处理,而是直接打印。
f = open('a.txt','rt',encoding='utf-8')
其中的t表示是以文本模式打开文件,在应用程序给操作系统发送数据请求后,操作系统在硬盘读取二进制编码,然后返还给应用程序,通过open方法,将编码解码成我们看到的字符,那么在b模式下打开文件,操作系统返还直接是一串二进制数字
文件的三种打开方式:
只读模式:‘r'
只写方式:'w'
追加模式:'a'
以字节模式打开文件的话,需要注意:
一定要写上‘b',只能以rb,wb,ab这种形式打开文件,不能省略‘b'。
f = open('a.txt','rb') f = open('a.txt','wb') f = open('a.txt','ab') #错误写法 f = open('a.txt','r') #未注明以b模式打开,这种写法是默认文本模式打开 f = open('a.txt','rb',encode = 'utf-8') #b模式打开,不能传入编码方式
字节模式下读写都是以bytes为单位的。如果想写入字符,需要编码后以字节类型写入
f = open('a.txt','wb') f.write('你哈'.encode('utf-8'))
注意:对于非文本文件,我们只能使用字节模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
二:字节模式下的操作
字节模式打开非文本文件
with open('1.jpg', 'rb') as f: # 以只读模式打开文件 data = f.read() # 读取文件全部内容,并赋值给变量data print(data) # 打印变量,我们得到是b'\xff\xd8\xff\xe0\x00这种形式的结果 print(type(data)) # 变量的类型<class 'bytes'> with open('1.jpg','rb') as f: data = f.read() print(type(data)) print(data.decode('utf-8')) #将读取的编码以utf-8标准解码 #图片文件编码方式不是utf-8,所以不能解码,程序报错
以字节模式打开文本文件:
with open('db.txt', 'rb') as f: data = f.read() print(data) # 打印出来的是一串二进制数 print(data.decode('utf-8')) # 把二进制数用utf-8标准解码 print(type(data)) # 可以在屏幕上显示人类能看懂的字符了 with open('db.txt', 'wb') as f: f.write('你好啊\n'.encode('utf -8'))
在以字节打开文件时,文件的操作都要基于二进制进行了.
三:文件的修改
文件的修改并不是我们直观感受上的擦除重新写上,基于硬盘的特性,任何文件的修改操作都是新内容对原内容的覆盖。修改的概念存在于内存中,当应用程序启动,请求操作系统从硬盘中读取数据,读取的数据运行在内存上,这时,我们在应用程序上的操作修改类内存上的数据内容,但是并不影响到硬盘的数据。当我们点击保存时,新的数据会将原数据覆盖。这时,才完成了文件的修改。
修改文件方式一:
1:先把文件内容全部读取
2:在内存中修改
3:把修改好的内容覆盖写入到硬盘上
with open("db.txt", "r", encoding="utf-8") as f: # 打开文件 data = f.read() # 读取文件全部内容 data = data.replace("你好啊:", "======") # 修改文件内容 with open("db.txt", "w", encoding="utf-8") as f: # 以‘w'模式打开,清空文件 f.write(data) # 把修改后的数据写入
修改文件方式二:
1:以读的方式打开源文件
2:以写的方式打开一个新文件
import os # 引入os模块 with open('a.txt', 'r', encoding='utf-8') as read_f, open('new.txt', 'w', encoding='utf-8') as new_f: # 同时打开文件 for line in read_f: # 循环原文件内容 if '你好啊' in line: line = line.replace('你好啊', '哈哈哈哈哈哈') # 替换源文件内容 new_f.write(line) # 把原文件循环出来的内容写入到新文件中, os.remove('a.txt') # 调用OS模块功能删除原文件 os.rename('new.txt', 'a.txt') # 重命名新文件
以上就是详解Python中的文件操作的详细内容,更多关于python 文件操作的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】