一、文件的定义:文件是操作系统提供给用户或者应用程序的一种虚拟的概念,也可以说是一种接口或功能。

二、为什么要用文件:用户/应用程序可以通过操作文件进而控制硬盘将数据永久保存其中。文件是操作系统提供的一种功能,用户/操作系统操作文件时,其实就是在向操作系统申请系统调用,再用操作系统转转为具体的硬盘操作指令。

三、文件使用open的模式

  1、控制文件读写内容的两种模式 t 和 b :

    ① t :文本文件的模式,也是默认模式,读写都以str(unicode格式)为单位。

    ②Bytes:二进制模式。

  2、控制文件读写操作的模式:

    ① r :只读模式。

    ② w:只写模式。

    ③ a :只追加写模式。

    ④ r+ :读模式下兼容写。

    ⑤ w+ :写模式下兼容读。

    ⑥ a+ :追加写模式下兼容读。

  3、强调:t 和 b 不能单独使用,必须和 r/w/a/r+/w+/a+ 连用。

四、文件基本操作

  1、打开文件:open(文件路径)。

    ①在windows系统中的特别说明:此系统中的文件路径会以文件夹名+正斜杠的形式,这在python中有些会被识别位特殊功能,为避免这种情况,有两种解决方案。

      Ⅰ:在文件路径的左侧引号外加一个 r ,即表示将引号内的全部内容标记为只读字符,不识别含义。此方法较为推荐。

      Ⅱ:可以将文件路径的正斜杠改写为反斜杠,python解释器识别时会自动调整。

open('C:\ddd.txt\nb\c\d.txt')  # 这其中的\n会被python语法识别为转译符
open(r'C:\ddd.txt\nb\c\d.txt')  # 解决方案一,推荐使用
open('C:/ddd.txt/nb/c/d.txt')  # 解决方案二

    ②打开文件的操作会产生某种数据类型的值,占用应用程序的内存空间。

a = open(r'E:\python之路\01 课程\week02-day05\作业专用\0001.txt')
print(a, type(a))  # 此处类型结果为 _io.TextIOWrapper

  2、操作文件:就是读或写的操作,应用程序对文件的读写请求都是在向操作系统发送调用申请,然后由操作系统通过cpu控制硬盘把输入读入内存,或存入硬盘。以读为例:

a = open(r'E:\python之路\01 课程\week02-day05\作业专用\0001.txt')  # 该文件事先编辑了内容为:is 0001
b = a.read()
print(b)  # 结果为 is 0001

  3、关闭文件:作用是为了回收操作系统的内存资源。

a = open(r'E:\python之路\01 课程\week02-day05\作业专用\0001.txt')
b = a.read()
print(b)
a.close()  # 关闭文件,回收操作系统资源
del a  # 变量 a 依然存在,但是不能再读了,理应删除以回收应用程序资源,但是因为其占用空间微乎其微,此步可忽略不做

  4、文件对象操作,又称文件句柄:with.......as,使用此功能运行完会自动关闭文件。

with open(r'E:\python之路\01 课程\week02-day05\作业专用\0001.txt', mode='rt')as a1, \
        open(r'E:\python之路\01 课程\week02-day05\作业专用\0002.txt', mode='rt')as a2:  # with后面可以接多个open,以 , 隔开,还可以 \ 换行
    b1 = a1.read()
    b2 = a2.read()
    print(b1)  # 结果为 is 0001
    print(b2)  # 结果为 is 0002
print(a1.read())  # with as 结束后,文件自动关闭,所以此步会报错

  5、指定字符编码:没有指定encoding参数操作系统会使用自己的模式编码,例如linux使用utf-8,windos使用GBK。

    ①以windows为例,若文件中有中文,因为文本编辑器编辑此文本时是以utf-8存入硬盘,我们需要操作这个文件的时候,若用操作系统默认的GBK码从硬盘解码出来的话,会因为存取码不对应而产生乱码,要解决此问题需要使用encoding功能指定解码表。

with open(r'E:\python之路\01 课程\week02-day05\作业专用\0003 中文文件.txt', mode='rt', encoding='utf-8') as a3:
    b3 = a3.read()
    print(b3)  # 结果为 这是 0003 中文文件

五、文件操作模式详解

  1、r 模式(默认模式):只读模式,当文件不存在时则报错,当文件存在时指针会跳到开始位置。

with open(r'E:\python之路\01 课程\week02-day05\作业专用\00044.txt', mode='rt', encoding='utf-8')as a44:
    b44 = a44.read()
    print(b44)  # 文件 00044不存在,所以报错
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0004.txt', mode='rt', encoding='utf-8')as a4:
    b4 = a4.read()
    print(b4)
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0004.txt', mode='rt', encoding='utf-8')as a4:
    b4_2 = a4.read()
    print(b4_2)
# 第二次打开同样文件,指针会重新跳到开始位置。所以结果为 is 0004    is 0004

  2、w模式:只写模式,当文件不存在时会创建空文件,当文件存在时会清空原文件内容,指针位于开始位置。

with open(r'E:\python之路\01 课程\week02-day05\作业专用\00055.txt', mode='wt', encoding='utf-8')as a55:
    a55.write('is 00055')
# 原来没有0055文件,执行此段代码会创建该文件,并写入内容 is 00055
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0005.txt', mode='wt', encoding='utf-8')as a5:
    a5.write('is 0005 第一次 ')
    a5.write('is 0005 第二次 ')
    a5.write('is 0005 第三次 ')
# 一次只读模式内,因为文件一直打开,所以连续写入的结果是新的内容总是跟在旧的内容后面,此时,文件上内容为 is 0005 第一次 is 0005 第二次 is 0005 第三次
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0005.txt', mode='wt', encoding='utf-8')as a5:
    a5.write('is 0005 第一次 ')
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0005.txt', mode='wt', encoding='utf-8')as a5:
    a5.write('is 0005 第二次 ')
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0005.txt', mode='wt', encoding='utf-8')as a5:
    a5.write('is 0005 第三次 ')
# 若每次重新打开w模式,每次一开始就会先清空文件,所以文件内容就变成了最后一次的写入,即为 is 0005 第三次 

  3、a模式:追加写模式,当文件不存在时会创建空文件,这点跟w模式类似,当文件存在时指针会跳到原有内容最后。所以创建新文件并在同一次打开模式下对新文件进行连续写入的时候,w模式和a模式效果相同。不同在于对已有文件的操作。

with open(r'E:\python之路\01 课程\week02-day05\作业专用\0006.txt', mode='at', encoding='utf-8')as a6:
    a6.write('is 0006 追加内容1 ')
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0006.txt', mode='at', encoding='utf-8')as a6:
    a6.write('is 0006 追加内容2 ')
with open(r'E:\python之路\01 课程\week02-day05\作业专用\0006.txt', mode='at', encoding='utf-8')as a6:
    a6.write('is 0006 追加内容3 ')
# 每次进入追加模式指针会跳到原有内容的末尾,进行添加写入,所以内容为 is 0006 原有内容 is 0006 追加内容1 is 0006 追加内容2 is 0006 追加内容3

 

posted on 2020-03-13 18:13  焚音留香  阅读(649)  评论(0编辑  收藏  举报