百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python技能:文件读写速成!r、w、a、w+、a+、r+和他们的b版本?

off999 2024-11-03 14:20 46 浏览 0 评论

大家好,我是钢铁老豆!今天我们来聊聊一个超实用的编程技巧——如何在Python中读写文本和二进制文件。不论你是在处理日志文件,还是要保存那些看起来像是外星文字的二进制数据,掌握这些基础操作绝对能让你在编程路上走得更顺畅。就让我们一起来看看,用一点点代码怎么搞定这些看似复杂的操作!

1. 读写文本文件

1.1 读取文本文件

我们首先使用分步方式讲解文件的打开、读取、移动、关闭。

以'r'文本只读模式打开文件,默认系统字符编码,比如GBK、UTF-8,可选encoding显式设置,避免编解码问题。

支持多种读取方式,返回字符串类型,读取时指针位置随之移动。

# 'r'文本只读模式打开文件
f = open('example.txt', 'r', encoding='utf-8')

# 支持多种读取方式,返回字符串内容,指针位置随之移动

# 方式1:读取所有字符内容,指针随之移动到文件末尾
content = f.read()
print(content)

# 方式2:读取指定字符数量的内容,指针随之移动
f.seek(0)  # 重置指针为文件开头
content = f.read(123)  # 读取最多123个字符的内容
print(content)

# 方式3:读取单行字符串,指针随之移动到行末尾
f.seek(0)  # 重置指针为文件开头
first_line = f.readline() # 读取第一行,指针随之移动到第一行末尾
print(first_line)
second_line = f.readline()  # 读取第二行,指针随之移动到第二行末尾
print(second_line)

# 方式4:读取所有行字符串,返回列表,指针随之移动到文件末尾
f.seek(0)  # 重置指针为文件开头
lines = f.readlines()  # 读取所有行字符串,返回字符串列表
print(lines)

# 修改指针位置,第一个参数表字节偏移量,第二个参数表偏移量相对位置(默认0表文件开头,1表当前位置,2表文件末尾)
## 修改指针位置为文件开头
f.seek(0)  # 相当于f.seek(0, 0)
## 修改指针位置为文件末尾
f.seek(0, 2)
## 修改指针位置为文件其他字节偏移量,不建议文本模式下使用,因为比如1个UTF-8编码的字符可能占用多个字节,如果指针刚好移动到多个字节中间,大概率导致后续读取出错
f.seek(123)  # 相当于f.seek(123, 0)

# 获取指针位置,返回字节偏移量,告诉你文件经过上述read/readline/readlines操作后,读取到哪个位置了
f.tell()

# 关闭文件
f.close()

通常会改用上下文管理器(with关键字)来自动管理文件的关闭操作:

  • 进入with代码块时,自动执行文件对象的__enter__方法
  • 退出with代码块时,自动执行文件对象的__exit__方法 (调用close方法)
with open('example.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

1.2 写入文本文件

同样地,我们使用分步方式讲解文件的打开、写入、移动、关闭。

多种文本写模式打开文件,写入单条或多条字符串。

# 写模式打开文件,支持多种模式:
# w:文件不存在新建,存在则清空原有内容再写入
# a:文件不存在新建,存在则原有内容后追加写入
# w+:w写入基础上,同时支持读取
# a+:a追加基础上,同时支持读取
# r+:文件不存在抛出异常,存在则原有内容任意位置开始写入,同时支持读取
f = open('example.txt', 'w', encoding='utf-8')

# 写入单条字符串,不自动添加换行符\n,需要自己手动包含
f.write('Hello, world!\n')

# 写入多条字符串,同样不自动添加换行符\n,需要自己手动包含
lines = ["第一行\n", "第二行\n", "第三行\n"]
f.writelines(lines)

# 关闭文件,此时内容才正式写入文件,对用户或其他程序可见
f.close()

同样地,通常会改用上下文管理器(with关键字)来自动管理文件的关闭操作:

lines = ["第一行\n", "第二行\n", "第三行\n"]
with open('example.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

2.读写二进制文件

二进制文件的读写,与文本文件类似,但模式需要添加b后缀,读写内容以字节串类型表示。

2.1 读取二进制文件

以'rb'二进制只读模式打开文件,无需指定字符编码,因为非文本。

支持多种读取方式,返回bytes字节串类型,读取时指针位置随之移动。

# 'rb'二进制只读模式打开文件
with open('example.bin', 'rb') as f:
    # 支持多种读取方式,指针位置随之移动
    
    # 方式1:读取所有字节内容
    content = f.read()
    print(content)
    
    # 方式2:读取指定字节数量的内容
    f.seek(0)  # 重置指针位置为文件开头
    content = f.read(123)  # 读取最多123个字节数量的内容
    print(content)
    
    # 方式3:读取单行字节串内容
    f.seek(0)  # 重置指针位置为文件开头
    line = f.readline()  # 读取单行字节串,遇到b'\n'返回
    print(line)
    
    # 方式4:读取所有行字节串内容
    f.seek(0)  # 重置指针位置为文件开头
    lines = f.readlines()  # 读取所有行字节串内容,返回字节串列表
    print(lines)

2.2 写入二进制文件

多种二进制写模式打开文件,写入单条或多条字节串。

# 二进制写模式打开文件,支持多种模式:
# wb:文件不存在新建,存在则清空原有内容再写入
# ab:文件不存在新建,存在则原有内容后追加写入
# wb+:w写入基础上,同时支持读取
# ab+:a追加基础上,同时支持读取
# rb+:文件不存在抛出异常,存在则原有内容任意位置开始写入,同时支持读取
with open('example.bin', 'wb') as f:   
    # 写入单条字节串
    f.write(b'\x00\x01\x02\x03')
    # 写入多条字节串,这里我简单复制了3条
    lines = [b'\x00\x01\x02\x03'] * 3
    f.writelines(lines)

3. 完整参考

想要更深入地了解如何在Python中操作文件?可以访问Python官方文档,那里有你需要的所有详细信息。

https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files

以上就是今天的分享,希望对大家有所帮助!如果觉得有用,不妨点个赞、收藏、留言或关注我吧!每天学习一点Python小知识,这里有你感兴趣的基础、技能、数据、模型和AI。我是钢铁老豆,一个30岁转行IT、自学成为算法工程师、想用AI点亮孩子小小世界的Pythoner。

相关推荐

下载全民k歌免费安装(找回《全民k歌》)

打开全民k歌网页版,打开想要下载的歌曲按F12,点击Network的选项,再按ctrl+R找到里面最大的文件,右键openlinkinnewtab新的页面中右键另存为,就可以下载了1.确保您的手机支...

oa软件排行榜前十名(oa软件下载)

OA办公软件有很多,例如泛微、致远、蓝凌、华天动力、索昂、通达、飞企、微宏、万户、金和、今目标、协众、云之家、泛普、明道、天翎、手册类、安创安全OA、小熊OA等相对大型企业来说,中小型企业的管理规范...

免费下载优酷视频(优酷下载 安装)

首先,你要开通优酷VIP,不然很多电影都下载不了,其次就是打开手机上的优酷,找到自己想看的电影,点击进去,然后再播放页面,点击下面的下载按钮。选择下载版本的质量进行下载,有超清,高清,标清,然后返回到...

qq恢复官网(QQ恢复官网网站)

打开浏览器,然后搜索QQ恢复官方网站,搜索到之后,点击进入;登录帐号,然后选择恢复QQ群,选择要恢复的群,点击确定即可。;注:只能用于找回最近28天内删除的群成员,以及解散、转让的群。如果误删的QQ群...

手机版英雄联盟(手机版英雄联盟有云顶之弈吗)

第一行是id号,也就是账号。第二行是密码。下面两个上到下分别是注册和忘记密码,方框里的是记住账号英雄联盟手游的版本可以通过游戏客户端上方的版本号及官方社交媒体平台上的公告来查看。版本号通常由一串数字和...

gta5手机版免费下正版(gta5手机版免费下正版安卓gwa5)

官方貌似不支持下载游戏因为为正版貌似都是镜像版的希望帮到你正版游戏需要购买正版游戏盘的祝你游戏愉快!什么游戏都可以用修改器修改.不过前提是游戏公司没有限定,如果游戏公司在游戏中已经限定了那一...

pdf阅读器永久免费版(pdf阅读器免费吗)
pdf阅读器永久免费版(pdf阅读器免费吗)

如果仅仅是阅读PDF文档的话。福星PDF阅读器就是永久免费版。美国的Adobereader也是PDF阅读器的永久免费版。PDF是一种专业的文档格式。它具有多种优势。很多专业的文献都通过PDF格式来保存。福星公司是中国优秀的PDF文档阅读...

2026-01-18 14:43 off999

在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
yy开播工具手机版(yy开播工具手机版官网)

想要将手机连接到YY开播,首先确保手机和电脑处于同一无线网络下,并且电脑已经安装了YY开播软件。在手机上下载并安装YY开播助手APP后,打开该应用并登录自己的YY账号。然后,在YY开播助手APP中选择...

迅游加速器国际版(迅游加速器国际版要钱么)

迅游不能下载海外游戏的原因是因为一些海外游戏需要进行版权验证,而迅游没有获得这些游戏的版权许可。此外,由于不同国家的游戏法规和政策不同,迅游有时需要根据不同的规定进行调整,这也可能会限制用户下载一些海...

起名网官方网(起名字官网)

https://mqm.d1xz.net/取名网专业从事品牌设计、起名服务,风水咨询、等为一体的专业网站,主要包括宝宝取名、公司名称,产品名称,以及在商品、服务及企业推广宣传过程中涉及到的各种名称和语...

腾讯安全中心网址是什么(腾讯安全中心网址是啥)
腾讯安全中心网址是什么(腾讯安全中心网址是啥)

  进入QQ安全中心主要有三种方法:  一、有QQ密码登陆QQ后进入:  登陆QQ,点击QQ窗口右下角的图标,然后在出现的菜单中,选择“安全”——“安全中心首页”,(如下图);即可进入QQ安全中心页面了。  二、无QQ密码登陆界面进入:...

2026-01-18 13:15 off999

金山毒霸安卓手机版(金山毒霸官方正版手机版)

金山毒霸内核用的是瑞星的内核,瑞星用的是卡巴斯基的内核,性能继承了卡巴斯基的特性,占用内存和CPU都很大,但是杀毒效果还算可以,最不能容忍的就是金山毒霸不是24小时的,就上班的时候可以解决问题,其他时...

qq2011下载(qq2011下载手机版下载)

2011款的奇瑞QQ3低配车型行驶6万公里,个人认为车子车况大体可以,手续齐全的话二手车价位大体在七千左右,具体需要看实际车况。之前官方下载手机QQ的方法有两种:1.手机访问mq.3g.qq.co...

下载拼多多免费下载安装(免费下载拼拼)

拼多多下载需要用户使用手机或平板电脑,并且需要有稳定的网络连接。用户需要保证使用的手机或平板电脑系统版本符合拼多多应用的最低版本要求,同时还需要在手机设置中开启“安装未知来源应用程序”的选项。此外,用...

取消回复欢迎 发表评论: