python⽂件对象及open()函数读写⽂件详解
**⼀.⽂件对象的引⼊**
有时我们需要把数据永久存储起来,随时使⽤随时读取。例如,我们通过程序建⽴的列表、字典等数据,当程序结束时,需要把这些数据存储到⽂件中,当程序再次启动时,可以把这些数据读⼊到程序中,避免这些数据的重新录⼊。要实现上⾯的功能,我们该怎么做呢?
要把列表、字典等数据永久存储起来,就需要⽤到⽂件。⽂件⼀般都存储在磁盘中,电脑中存储的图⽚、资料、⾳视频等都是以⽂件⽅式存储的,每个⽂件都有⼀个名称,可以根据⽂件的名称来选择打开或存储到某⼀⽂件。当计算机中的⽂件很多时,⽤户使⽤起来会⾮常不⽅便,为此⼜引⼊了⽂件⽬录,每⼀个⽬录就是⼀个存储⽂件的集合,⽬录下⾯⼜有⼦⽬录,形成层级⽬录。打开电脑查看盘符时,会看到盘符下⾯有⽬录也有⽂件,⽬录⾥⾯也有⽂件或⽬录。
在Python语⾔中,负责⽂件操作的称为⽂件对象,⽂件对象不仅可以访问存储在磁盘中的⽂件,也可以访问⽹络⽂件。**⽂件对象通过open函数得到,获取⽂件对象后,就可以使⽤⽂件对象提供的⽅法来读写⽂件。**由此引⼊open()函数
⼆.使⽤open()函数来读写⽂件
应⽤Python提供的open函数可以返回⽂件对象。open函数提供了输⼊/输出操作的通⽤接⼝,open函数成功打开⽂件后会返回⼀个⽂件对象,打开失败时会抛出异常IOError。open函数的基本语法如下:
2.1.函数定义及参数说明
python怎么读文件夹下的文件夹def open(file, mode='r', buffering=None, encoding=None,errors=None, newline=None, closefd=True):
pass
open函数需要传⼊⼋个参数,分别是fileName、mode、buffering、encoding、errors、newline、closefd、opener,⽐较重要的是前四个参数,除了fileName参数外,其它都有默认值,因此使⽤open函数时,不需要传⼊全部参数。下⾯分别对前四个参数予以详细说明:
fileName指定了要打开的⽂件名称,fileName的数据类型为字符串,fileName也包含了⽂件所在的存储路径,存储路径可以是相对路径,此时⽂件在⼯程⽬录下⾯f=open('','r'),也可以是绝对路径,此时可任意指定⽬录,⽐如
f=open('C:/Users/shu/Desktop/','r')
mode指定了⽂件的打开模式,也就是设定⽂件的打开权限。⽂件的打开模式有⼗⼏种(后⾯的表格给出详细描述),⽐较常⽤的有
**’r’、’r+’和’w+’模式,使⽤’r’模式打开的⽂件只能读取⽂件,⽽不能改写⽂件内容;使⽤’r+’模式打开的⽂件即可以读取⽂件,也可以写⼊⽂件;使⽤’w+’模式与’r+’模式基本相同,唯⼀不同的是,使⽤’w+’模式可以创建⼀个新的⽂件,如果打开的⽂件已存在,原有内容会被删除,因此要谨慎使⽤’w+’模式打开⽂件,防⽌已有⽂件内容被清空。
buffering⽤于指定打开⽂件所⽤的缓冲⽅式,缓冲是指⽤于读取⽂件的缓冲区,缓冲区就是⼀段内存区域。设置缓冲区的⽬的是先把⽂件内容读取到缓冲区,可以减少CPU读取磁盘的次数。Buffering为0时表⽰不缓冲,为1时表⽰只缓冲⼀⾏数据,为-1时表⽰使⽤系统默认缓冲机制,默认为-1。任何⼤于1的值表⽰使⽤给定的的值作为缓冲区⼤⼩。⼀般情况下使⽤函数默认值即可。
encoding⽤于指定⽂件的编码⽅式,默认采⽤utf-8,编码⽅式主要是指⽂件中的字符编码。我们经常会碰到这样的情况,当打开⼀个⽂件时,内容全部是乱码,这是因为创建⽂件时采⽤的编码⽅式,和打开⽂件时的编码⽅式不⼀样,就会造成字符显⽰错误,看上去就是乱码。
2.2、⽂件操作的流程
#1. 打开⽂件,得到⽂件对象(有资料说是句柄)⼀个变量
#2. 通过句柄对⽂件进⾏操作
#3. 关闭⽂件
filename = ''
try:
f=open(filename, encoding='utf-8') #打开⽂件
ad() #⽂件操
print(data)
f.close() #关闭⽂件
except IOError:
print(“⽂件打开失败,%s⽂件不存在” %filename);
2.3.关于打开模式:
# r 以只读⽅式打开⽂件。这是默认模式。⽂件必须存在,不存在抛出错误
#rb 以⼆进制格式打开⼀个⽂件⽤于只读。
#r+ 打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。读完就追加。
#w 打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件。
#w+ 打开⼀个⽂件⽤于读写。如果该⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件。
#a 打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进#a+ 打开⼀个⽂件⽤于读写。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。⽂件打开时会是追加模式。如果该⽂件不存在,创建新⽂件⽤于读写。
注:后⾯有带b的⽅式,不需要考虑编码⽅式。有带+号的,则可读可写,不过它们之间还是有区别的
2.4、关于编码⽅式:
#1.win系统默认是gbk编码的,所以桌⾯⽣成的TXT之类的都是gbk编码的。
#2.出现乱码正常都是原⽂件的编码⽅式和打开指定的编码不⼀致所致
2.5、关闭⽂件:
不要⼩看这⼀步,因为我们读取⽂件是把⽂科读取到内存中的,如果我们没关闭它,它就会⼀直占⽤系统资源,⽽且还可能导致其他不
安全隐患。还有⼀种⽅法可以让我们不⽤去特意关注关闭⽂件。那就是 with open()
with open('','a+') as f:
f.write('你好')
ad())
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论