python新手入门基本笔记(open打开指定文件及常见操作指南)
操作系统一般不允许程序直接操作磁盘文件的,文件在磁盘上的读写都是由操作系统提供的,文件操作包括创建、删除、修改权限、读取、写入等。要想实现对文件的操作就需要请求操作系统打开一个文件对象,然后通过操作系统提供的接口来实现对文件读写的相关操作。读写文件是最常见的 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 = "测试数据\n"
str_list= ['1\n','2\n','3\n','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()
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com