首页Python【Python内置函数】o...

【Python内置函数】open()函数

Python 提供了许多内置函数,这些函数是Python语言的一部分,可以直接在Python程序中使用而无需导入任何模块。

本系列将会陆续整理分享一些的Python内置函数。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_built-in_functions





01
简介

open() 函数用于打开文件并返回相应的文件对象。 如果文件无法打开,则会引发 OSError。

open() 函数的基本语法如下:

open(file, mode='r', buffering=-1     encoding=None, errors=None     newline=None, closefd=True     opener=None)
参数说明:
  • file:文件的路径或文件描述符:
  • 路径对象:可以是绝对路径或相对路径;
  • 整型的文件描述符:一个已经打开文件的整数标识符,通常由底层操作系统接口返回。如果将文件描述符传递给open()函数,Python会基于这个文件描述符创建一个文件对象。当这个通过open()返回的文件对象被关闭时,除非closefd参数被设置为False,否则这个文件描述符也会被关闭。
  • mode:可选参数,用于指定打开文件的模式,常用的模式有:
  • 'r':只读模式,默认值。打开文件用于读取文本内容。文件必须存在,否则会抛出 FileNotFoundError。等同于 rt’(读取文本)

  • 'w':只写模式。打开文件用于写入文本内容。如果文件已存在,会覆盖原有内容;如果文件不存在,会创建一个新文件。等同于 ‘wt’(写入文本)。

  • 'x':独占创建模式。打开文件用于写入文本内容。如果文件已存在,会抛出 FileExistsError;如果文件不存在,会创建一个新文件。等同于 ‘xt’(独占创建文本)

  • 'a':追加模式。打开文件用于在文件末尾追加文本内容。如果文件不存在,会创建一个新文件。在某些 Unix 系统中,即使当前读写指针不在文件末尾,写入的内容也会追加到文件末尾。等同于 ‘at’(追加文本)。

  • 't':文本模式。这是默认模式。以文本形式打开文件,读写时会进行编码转换。可以与‘r/w/x/a’等模式组合使用,例如‘rt/wt/xt/at’

  • 'b':二进制模式。以二进制形式打开文件,读写时不会进行编码转换。可以与 ‘r/w/x/a’ 等模式组合使用,例如 ‘rb/wb/xb/ab’

  • '+':更新模式。可以同时进行读写操作。可以与 ‘r’‘w’‘a’ 等模式组合使用,例如,‘r+’:读写模式,文件必须存在,不会覆盖原有内容;‘w+’:读写模式,会覆盖原有文件内容;‘a+’:读写模式,写入内容会追加到文件末尾。

  • buffering:可选参数,用于设置缓冲策略。取值有:
  • -1:默认值,表示使用系统默认的缓冲策略。对于文本文件,通常会根据文件大小和系统情况进行缓冲;对于二进制文件,通常会使用固定大小的缓冲区。
  • 0:表示不进行缓冲,每次读写操作都会直接与文件系统交互,但这种方式效率较低,一般不推荐使用。
  • 大于1的整数:表示使用固定大小的缓冲区,单位为字节。例如 buffering=1024 表示使用 1024 字节的缓冲区。
  • encoding:用于指定文件的编码方式。
该参数仅在文本模式下使用。如果未指定encoding参数,Python会使用平台默认的编码方式。平台默认编码可以通过locale.getencoding()函数获取。
  • errors:用于指定在编码和解码过程中如何处理错误。
该参数仅在文本模式下使用取值可以是以下标准错误处理方式之一,也可以是通过 codecs.register_error() 注册的任何错误处理名称:
  • ‘strict’:如果遇到编码错误,会抛出 ValueError 异常。这是默认值,None 也有相同的效果。
  • ‘ignore’:忽略错误。注意,忽略编码错误可能会导致数据丢失。
  • ‘replace’:在遇到格式错误的数据时,插入一个替换标记(如 ?)。
  • ‘surrogateescape‘:将任何错误的字节表示为低代理码单元(从 U+DC80 到 U+DCFF)。这些代理码单元在写入数据时,使用 surrogateescape 错误处理方式会转换回相同的字节。这在处理未知编码的文件时非常有用。
  • xmlcharrefreplace:仅在写入文件时支持。不支持的字符会被替换为相应的 XML 字符引用 &#nnn;。
  • ‘backslashreplace’:将格式错误的数据替换为 Python 的反斜杠转义序列。
  • ‘namereplace’:仅在写入文件时支持。不支持的字符会被替换为 N{…} 转义序列。
  • newline:用于指定如何处理文件中的换行符。
该参数仅在文本模式下使用。取值可以是以下几种之一:
  • None:启用通用换行模式(universal newlines mode)。输入中的行可以以 nr 或 rn 结尾,这些换行符会被翻译成 n 后返回给调用者。
  • :启用通用换行模式,但换行符不会被翻译,直接返回给调用者。
  • ‘n’:输入中的行仅以 n 结尾,换行符不会被翻译,直接返回给调用者。
  • ‘r’:输入中的行仅以 r 结尾,换行符不会被翻译,直接返回给调用者。
  • ‘rn’:输入中的行仅以 rn 结尾,换行符不会被翻译,直接返回给调用者。
  • closefd:用于指定文件描述符在文件对象关闭时的行为。
该参数仅在file参数是一个文件描述符时有效,参数的取值可以是TrueFalse
  • True(默认值):当通过 open() 函数返回的文件对象被关闭时,文件描述符也会被自动关闭。这意味着你不需要再手动调用 os.close(fd) 来关闭文件描述符。
  • False:当通过 open() 函数返回的文件对象被关闭时,文件描述符不会被关闭。你需要在适当的时候手动调用 os.close(fd) 来关闭文件描述符,否则可能会导致资源泄露。
  • opener:一个可调用对象,用于自定义打开文件的方式。
open()函数被调用时,会将fileflags传递给opener函数,opener函数必须返回一个有效的文件描述符。
返回值:

open() 函数返回一个文件对象,通过该文件对象可以进行文件的读写等操作。文件对象常用的方法有:

  • read(size=-1):读取文件内容。size 参数指定读取的字符数(文本模式)或字节数(二进制模式),默认值 -1 表示读取整个文件。
  • readline(size=-1):读取文件中的一行内容。size 参数指定读取的最大字符数(文本模式)或字节数(二进制模式),默认值 -1 表示读取整行。
  • readlines():读取文件中所有行的内容,返回一个包含每行内容的列表。
  • write(string):写入字符串(文本模式)或字节序列(二进制模式)到文件中。
  • writelines(lines):写入一个字符串列表(文本模式)或字节序列列表(二进制模式)到文件中,不会自动添加换行符。
  • seek(offset, whence=0):移动文件读写指针的位置。offset 参数指定偏移量,whence 参数指定偏移的基准位置,取值有 0(文件开头,默认值)、1(当前位置)、2(文件末尾)。
  • tell():返回文件读写指针的当前位置。
  • close():关闭文件对象,释放系统资源。
02
使用

下面是一些使用 open() 函数的示例:

使用open()函数时,建议配合with语句一起使用。with语句可以自动管理文件的打开和关闭,即使在文件操作过程中发生异常,也能确保文件被正确关闭,避免资源泄露。

# 以只读模式打开文件
with open('example.txt''r', encoding='utf-8') as file:
    content = file.read()
    print(content)
    
# 以写模式打开文件,覆盖原有内容
with open('example.txt''w', encoding='utf-8') as file:
    file.write('Hello, World!')

# 以追加模式打开文件,追加内容
with open('example.txt''a', encoding='utf-8') as file:
    file.write('nThis is a new line.')

# 以文本模式读取文件,指定换行符处理方式
with open('example.txt''r', encoding='utf-8', newline='') as file:
    lines = file.readlines()
    for line in lines:
        print(line)

# 创建一个二进制文件并写入数据
with open('example.bin''wb') as binary_file:   
    # 写入一个字符串(但需要先将其编码为二进制数据)
    # 假设我们想要写入字符串 "hello",并使用 UTF-8 编码
    binary_file.write(b'Hello, World!')  # UTF-8 编码的 "hello" 是 b'hello'

# 以二进制模式读取文件
with open('example.bin''rb') as file:
    binary_data = file.read()
    print(binary_data)


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments