python文件对象及open()函数读写文件详解

**一.文件对象的引入**
      有时我们需要把数据永久存储起来,随时使用随时读取。例如,我们通过程序建立的列表、字典等数据,当程序结束时,需要把这些数据存储到文件中,当程序再次启动时,可以把这些数据读入到程序中,避免这些数据的重新录入。要实现上面的功能,我们该怎么做呢?
      要把列表、字典等数据永久存储起来,就需要用到文件。文件一般都存储在磁盘中,电脑中存储的图片、资料、音视频等都是以文件方式存储的,每个文件都有一个名称,可以根据文件的名称来选择打开或存储到某一文件。当计算机中的文件很多时,用户使用起来会非常不方便,为此又引入了文件目录,每一个目录就是一个存储文件的集合,目录下面又有子目录,形成层级目录。打开电脑查看盘符时,会看到盘符下面有目录也有文件,目录里面也有文件或目录。
      在Python语言中,负责文件操作的称为文件对象,文件对象不仅可以访问存储在磁盘中的文件,也可以访问网络文件。**文件对象通过open函数得到,获取文件对象后,就可以使用文件对象提供的方法来读写文件。**由此引入open()函数

二.使用open()函数来读写文件
        应用Python提供的open函数可以返回文件对象。open函数提供了输入/输出操作的通用接口,open函数成功打开文件后会返回一个文件对象,打开失败时会抛出异常IOError。open函数的基本语法如下:
2.1.函数定义及参数说明
def open(file, mode='r', buffering=None, encoding=None,errors=None, newline=None, closefd=True): 
     pass

python文件对象及open()函数读写文件详解_第1张图片
  
open函数需要传入八个参数,分别是fileName、mode、buffering、encoding、errors、newline、closefd、opener,比较重要的是前四个参数,除了fileName参数外,其它都有默认值,因此使用open函数时,不需要传入全部参数。下面分别对前四个参数予以详细说明: 
       fileName指定了要打开的文件名称,fileName的数据类型为字符串,fileName也包含了文件所在的存储路径,存储路径可以是相对路径,此时文件在工程目录下面f=open('test.txt','r'),也可以是绝对路径,此时可任意指定目录,比如f=open('C:/Users/shu/Desktop/python/test.txt','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 = 'test.txt'
try:
   f=open(filename, encoding='utf-8')   #打开文件
   date=f.read()            #文件操
   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('test.txt','a+') as f:
    f.write('你好')
    print(f.read())

你可能感兴趣的:(Python学习1)