Python实战012open打开指定文件及常见操作指南
操作系统一般不允许程序直接操作磁盘文件的,文件在磁盘上的读写都是由操作系统提供的,文件操作包括创建、删除、修改权限、读取、写入等。要想实现对文件的操作就需要请求操作系统打开一个文件对象,然后通过操作系统提供的接口来实现对文件读写的相关操作。读写文件是最常见的 I/O 操作,Python内置相关API可以帮助我们快速的实现文件读写操作。
文件对象
Python内置的 open() 函数可以用于打开指定文件 ,该函数会返回一个文件对象(该对象包含了当前文件拥有的属性信息,相当于文件句柄)。参数file为要创建或打开文件的文件名称,参数mode用于指定文件的打开模式(可选),参数buffering用于指定对文件做读写操作时是否使用缓冲区。在打开文件之后就可调用文件对象的属性和方法,完成对文件的读/写操作之后最后需要关闭该文件,通过文件对象的close() 函数来实现即可。
打开模式
文件打开是可以指定其打开的模式,该参数通过mode来指定【默认模式为只读(r)】。选择不同的打开模式决定了后续可以对文件进行操作,如果使用 r 模式打开的文件则只能读取文件而无法修改文件内容。open()提供了多种打开模式,下面列出了对应的打开模式和说明:
设置缓冲
缓存是数据交换的缓冲区,打开缓冲后当程序执行输出时会先将数据输出到缓冲区中,当要读取数据时会首先从缓存中查找需要的数据,如果找到了就直接执行没有再去内存中找。缓存的运行速度比内存快得多,可以帮助硬件更快地运行程序。所以使用open"的时候建议打开缓冲,这样程序执行 I/O 操作时将具有更好的性能。缓冲通过参数buffing来定义, 0代表不缓冲,1或大于1使用的缓冲区字节数大小,1表示使用系统默认缓冲字节数1024。
更新缓存
一般情况下文件关闭后会自动刷新到硬盘中并刷新缓冲区,如果你想在文件操作过程中更新缓冲时可以使用 flush()函数。该函数可以将缓冲强制刷新到硬盘中并清空缓冲区,当操作的文件较大时可以使用该函数及时的更新缓冲区。
文件属性
文件打开之后我们就可以获得该文件对象,该对象中包含了文件的一些属性。
文件读取
文件对象中提供了很多API可以用来读取文件内容,读取文件内容可使用 read()、readline() 以及 readlines() 函数。 read()会读出全部内容,readline()会逐行读取内容。readlines()则将指定的行数内容读取出来并返回一个列表,如果没有指定行数则全部输出。
文件写入
要实现内容的写入我们在打开文件时就需要先指定文件对象为可写模式,通过参数mode指定文件打开模式为读写(r+)。文件对象中同样提供了很多API可以用来写入文件内容,向文件中写入内容可以使用 write() 函数和writelines() 函数。write() 函数和read()、readline()函数对应可以将字符串写入文件(多个字符串写入会自动追到),writelines() 函数则与readlines()函数对应用来写入字符串列表的。readlines写入列表数据时不会自动换行,如果希望根据列表元素换行则需要在列表中显式的加入换行符。
文件定位
文件对象提供了一个tell()函数用来定位当前文件位置(这个定位的是字节位,计算机的最小存在单位),下次继续写入的时候就会知道从哪里开始继续。如果想改变当前文件的位置我们可以通过函数seek(offset [,from])来指定偏移量,offset 表示要移动的字节数(默认从起始位置),from指定开始移动字节的参考位置(可选)。from设置为0则以文件起始位置开始,当为1则从当前位置开始,当为2时从文件末尾开始编译offset个字节量。
错误解决:can"t do nonzero cur-relative seeks
在使用seek()函数时你可能会遇到这样的错误提示:"io.UnsupportedOperation: can"t do nonzero cur-relative seeks",这是因为没有指定b模式选项打开文件。r只允许从文件头开始计算相对位置,从文件其他位置计算时就会引发异常。这时候如果是写入就需要注意参数类型了,请求参数变成bytes对象了而不是str。
关闭文件
文件操作完之后应该及时的关闭,因为文件打开之后会产生缓存占用系统资源。而且如果文件被占用也容易造成其他程序执行异常,所以当我们操作完成之后应该及时关闭。关闭已经打开的文件可以使用close()函数来实现,关闭后的文件不能再进行读写操作(需要重新打开)。为了方便关闭文件Python增加了with功能,当with体执行完将自动执行close()函数来关闭打开的文件。
总结:
Python操作文件还是相当的简单高效的,利用open () 函数就可以快速的打开一个文件并创建文件流对象,这时候我们就可以调用它提供的方法进行读写操作。with可以创建一个临时的运行环境,运行环境中的代码执行完后自动安全退出环境。这样就可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出并给出报错信息。以上内容是小编给大家分享的【Python实战012:open打开指定文件及常见操作指南】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
为了方便学习,下面附上本文用到的源码:with open(filepath,mode="r",encoding="utf-8") as rf: rf.read() //读取整个文件对象 rf.readline() //读取每一行 rf.readlines() //读取指定行内容,未指定则返回全部 rf.readable() //检查文件是否可读 with open("./a.txt", "r+", encoding="utf-8", buffering=1024) as wf: str = "测试数据 " str_list= ["1 ","2 ","3 ","4"] wf.write(str) wf.writelines(str_list) with open("./a.txt", "rb+", buffering=1024) as wf: str1 = "件对象提供了一个tell()函数用来定位当前文件位置" wf.write(str1) # 错误 :TypeError: a bytes-like object is required, not "str" wf.write(str1.encode()) wf.seek(6, 0) #从起始位置开始偏移6个字节 wf.write("000".encode()) wf.seek(9, 1) # 从当前位置开始偏移9个字节 wf.write("111".encode()) wf.seek(6, 2) # 从末尾位置开始偏移6个字节 wf.write("222".encode()) with open("./a.txt",mode="r") as rf: rf.read() ------------------ 等效 ---------------------- rf=open("./a.txt",mode="r") rf.read() rf.close()
老QQ号有多大的价值?网友达到这些条件,或许能换套房1999年,马化腾与团队员工在深圳开发了第一代聊天软件QQ的前身OICQ,当时的OICQ只有几百KB的大小。马化腾与团队将其研发出来之后为了吸引更多用户,于是扮演女性用户专门与网友
马斯克四处造势,推动狗狗币突破新高争当最牛山寨币和狗币的上升逻辑一样,人称一坨屎币的SHIB最近也在上演一场荒诞狂飙。五月七日,马斯克在一条有关SHIB的Twitter上留言说我要找一只柴犬,我想找一只柴犬。这就是捧红了狗币的货
谷歌霸气官宣!发布新自研芯片原生安卓旗舰机皇在中国量产上市8月26日讯相信大家都知道,自从国产手机老大哥华为遭受到新一轮芯片禁令之后,也让全球智能手机市场迎来了新一轮的大洗牌,全球TOP5智能手机厂商都获得了非常不错的销量增长,就连被很多
漫步者NeoBudsPro圈铁降噪耳机听感为王实力圈粉TWS真无线蓝牙耳机行业在近两年兴起,逐渐引领了一种潮流。各大品牌都相继推出了价格不同的蓝牙耳机。随着这种新潮的诞生,进军真无线蓝牙耳机这个行业的,不仅有一些老品牌,还有新生力量的
电商的最后一段红利时期免费流量一说起电商,在大家的脑海中想到更多的是开车烧钱,竞争越来越大,流量越来越贵。。都是叫苦叫难的,今天我就给大家分享一个小众类目的行业医药健康,不开车,不报活动,就可以日销过万,该赚得
新能源汽车空间有多秀?小鹏P5特斯拉毛豆3在线打样雨雪天出行,难度MAX购物不能买太多,拎不动太头痛明明居住地到公司只有几公里,还要倒两趟地铁才能到达种种迹象表明,无车真的寸步难行。因此当我有了一笔可观的存款后,第一件事就是将购车
特斯拉modelY试驾历险记上个月modelY出了单电机版本,价格降了7万,有一天正好在亦庄办事,下午3点多有空,联系了特斯拉门店,到店试驾了modelY,试驾的车型还是双电机版,外观比model3高一些,比
两款重磅扫地机器人新品即将发售,石头G10和追觅W10抢先看8月底,扫地机器人行业的两款重磅产品都进入了预售阶段石头G10和追觅W10。虽然我们还没拿到这两款产品,但是我们对两款产品官方释放的数据信息进行了对比,今天就详细分析一下,希望对有
未来已来,欢呼吧人类特斯拉CEO马斯克在8月19号的人工智能大会上宣布他们将于2022年发布一款名为特斯拉机器人的原型产品。这款机器人的身高大约为1。73米。体重达56。7公斤。移动速度8公里每小时。
远营商强制手机移除5G开关是否伤天害理几大国有运营商正在强制各手机厂商移除任务栏中的5G快捷开关。三大(或几大)运营商是商业组织,为了一己的商业私利。为了更多赚国民的5g流量钱。强制取消5g开关。这于理于法是否符合,真
为什么AMD是目前最值得购买的顶级晶片股AdvancedMicroDevices最大的业务正在蓬勃发展,它正在从英特尔手中夺走市场份额。由于相对于英特尔芯片拥有技术优势,AMD坐拥巨大的收入机会。该公司有望通过发布以更高