Python open函数用法详解及实例展示

《网络安全自学教程》

open函数使用详解

  • 1、打开文件
  • 2、文件打开模式
  • 2.1、创建文件
  • 2.2、读取文件内容
  • 2.3、写入文件
  • 3、中文编码错误
  • 4、缓冲区
  • open() 可以打开一个文件,并返回文件对象。

    语法

    open( name, mode )
    

    参数

  • name:(必选)文件名,支持绝对路径和相对路径
  • mode:(可选)文件打开的模式,默认是 r 只读模式
  • encoding:(可选)指定字符集编码,默认None
  • errors:(可选)编码错误处理方式,常用的值有 ignore:忽略错误,replace:用?替换无法解析的字符。
  • buffing:(可选)设置缓冲区大小
  • 返回值

  • 返回文件对象
  • 1、打开文件

    open() 打开的文件,必须使用 close() 关闭。

    使用相对路径,打开同级目录下的文件,文件名可以自动补全

    file = open('myFile')
    print(file)
    
    file.close()
    

    输出:

    <_io.TextIOWrapper name='myFile' mode='r' encoding='cp936'>
    

    使用绝对路径,必须用斜杠 /,不能用反斜杠 \

    file = open('E:/data/PrCharm/pythonProject1/myFile')
    print(file)
    
    file.close()
    

    2、文件打开模式

    mode 参数可以设置文件打开的模式,共有16中模式,可以简化为四大类

  • r:读(只读不写)
  • w:写(只写不读)
  • a:追加(只写不读)
  • x:创建文件(只写不读)
  • 模式 描述
    r 只读模式(默认)
    r+ 读写模式,文件不存在会报错
    t 文本模式
    x 写模式,创建文件,文件已存在会报错
    w 写模式,文件存在则打开(原内容删除),文件不存在则创建
    w+ 读写模式,文件存在则打开(原内容删除),文件不存在则创建
    + 更新模式,可读可写
    b 二进制模式
    rb 二进制只读模式,常用于图片等非文本
    rb+ 二进制读写模式,常用于图片等非文本
    wb 二进制写模式,文件存在则打开(原内容删除),文件不存在则创建
    wb+ 二进制读写模式,文件存在则打开(原内容删除),文件不存在则创建
    a 追加模式,文件存在则打开(保留原内容),文件不存在则创建
    ab 二进制追加模式,文件存在则打开(保留原内容),文件不存在则创建
    a+ 读写模式,文件存在则打开(保留原内容),文件不存在则创建
    ab+ 二进制读写模式,文件存在则打开(保留原内容),文件不存在则创建
    U 换行模式(已弃用)

    接下来,我们演示一下常用模式的作用

    2.1、创建文件

    在当前目录创建文件,并写入内容

    file = open('myFile', mode='x')
    file.write('fist line hello python \n')
    file.write('second line hello python \n')
    file.write('third line hello python \n')
    
    file.close()
    

    当前目录会多出一个myFile文件,里面显示我们写入的内容

    2.2、读取文件内容

    读取文件内容常用的操作有:

  • file.read():读取全部内容
  • file.read(5):读取5个字节
  • file.readline():读取一行
  • 需要注意的是,读取文件时,指针是从文件开头往后移动的,我们只能按照字符顺序读取并且不能重复读取。

    比如,先读取全部内容,再读取一行内容,会发现读不到了,因为指针已经移动到文件末尾了,无法再向后移动了。

    file = open('myFile', mode='r')
    print('全部读取 \n', file.read())
    print('读取一行 \n', file.readline())
    
    file.close()
    

    输出:

    全部读取 
     fist line hello python 
    second line hello python 
    third line hello python 
    
    读取一行 
    

    2.3、写入文件

    我们向 2.1 创建的文件里面,写入一行内容。

    file = open('myFile', mode='w')
    file.write('fourthly line hello python \n')
    
    file.close()
    

    会发现,内容被覆盖了,实际上这不是覆盖;写模式打开文件时,会清空文件原来的内容。

    想保留原来的内容,可以用追加模式

    file = open('myFile', mode='a')
    file.write('fourthly line hello python')
    
    file.close()
    

    再看文件,原来的内容没有删除

    3、中文编码错误

    打开中文文件时,如果不指定字符集编码,会报错 UnicodeDecodeError: ‘gbk’ codec can’t decode byte

    需要使用 encodiing 参数设置字符集,比如utf8

    file = open('myFile', encoding='utf8')
    print(file.read())
    
    file.close()
    

    输出:

    中文内容
    

    提示:大部分文件编码都是utf8,为了避免编码问题,可以在打开文件时,手动设置 encoding=‘utf8’

    可以使用errors参数设置编码错误的处理方式。

    比如:ignore,忽略错误,程序继续执行,但无法解析的字符会打印乱码

    file = open('myFile', errors='ignore')
    print(file.read())
    
    file.close()
    

    输出:

    涓鏂
    

    或者:replace,用?替换无法解析的字符

    file = open('myFile', errors='replace')
    print(file.read())
    
    file.close()
    

    输出:

    涓�鏂�
    

    4、缓冲区

    buffing 参数可以设置缓冲区大小:

  • 0:或者False,表示不使用缓冲区
  • 大于1:指定缓冲区的大小(单位字节)
  • 负数:使用默认的缓冲区大小
  • 使用open() 打开文件时,建议不修改 buffing 参数的值,也就是打开缓冲区并保持默认大小。

    因为,计算机内存的I/O速度远高于计算机外设(鼠标、键盘、硬盘等)的I/O速度,如果不适用缓冲区,内存和外设就必须同时进行读写操作。也就是说,内存必须等待外设输入(输出)一个字节之后,才能再次输出(输入)一个字节。这会让内存中的程序大部分时间都处于等待状态。

    而使用缓冲区,程序就会将数据都输出到缓冲区,然后执行其他操作,然后由外设去缓冲区读取数据,内存和外设就不用同步操作了。

    作者:士别三日wyx

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python open函数用法详解及实例展示

    发表回复