python open_Python open()打开文件

文件的操作主要分为读取和写入两种,读取文件是指将磁盘上的文件内容读入内存或命名管道,写入文件则是将内存、缓冲区或命名管道内的内容写入磁盘上指定文件。Python 中操作文件也有两种常用方法,一是使用内置支持的 file 对象完成大部分文件操作,二是使用 os 模块提供的更为丰富的函数完成对文件和目录的操作。

在读取或写入文件之前,必须使用内置函数 open( ) 打开它,其语法是:

file object = open(filename [, accessmode="r"] [, buffering="-1"] [, encoding=None] [, errors=None] [, newline=None] [, closefd=True] [, opener=None])

其中 filename 是要访问的文件的文件名字符串,accessmode 用于指定文件打开的模式,详细的模式见表 1。

表 1:open( ) 函数的 accessmode 参数

模式

描述

r

以只读方式打开文件,指针指向文件头

rb

以只读方式打开二进制文件,指针指向文件头

r+

以读写方式打开文件,指针指向文件头

rb+

以读写方式打开二进制文件,指针指向文件头

w

以只写方式打开文件,若文件已存在则覆盖该文件,若文件不存在则创建新文件

wb

以只写方式打开二进制文件,若文件已存在则覆盖该文件,若文件不存在则创建新文件

w+

以读写方式打开文件,若文件已存在则覆盖该文件,若文件不存在则创建新文件

wb+

以读写方式打开二进制文件,若文件已存在则覆盖该文件,若文件不存在则创建新文件

a

以追加方式打开文件,指针指向文件尾,若文件不存在则创建新文件

ab

以追加方式打开二进制文件,指针指向文件尾,若文件不存在则创建新文件

a+

以追加、读写方式打开文件,指针指向文件尾,若文件不存在则创建新文件

ab+

以追加、读写方式打开二进制文件,指针指向文件尾,若文件不存在则创建新文件

通常,文件以文本模式被打开,这意味着从文件读出和向文件写入的字符串会被特定的编码方式(默认是 UTF-8)编码。而以二进制模式打开文件表示数据会以字节对象的形式读出和写入,这种模式应该用于存储非文本内容的文件。

在文本模式下,读取时默认会将平台有关的行结束符(UNIX 上是 \n,Windows 上是 \r\n)转换为 \n,在文本模式下写入时默认会将出现的 \n 转换成平台有关的行结束符,这种做法可能会损坏二进制文件,因此对不同类型的文件要采用正确的模式读写。

buffering 用于指明访问文件时的缓冲区设置,取值为 0 表示不使用缓冲,取值为 1 表示在访问文件进行时使用行缓冲(仅用于文本模式),取值为大于 1 的整数表示使用固定大小的缓冲区进行缓冲,取值为负数表示使用系统默认大小的缓冲区。

encoding 用于编码或解码文件的编码名称。该参数应仅用于文本模式,默认的编码是平台依赖的。

errors 用于指定如何操作编、解码的错误,此参数不能用于二进制模式。常见的可取值如表 2 所示。

表 2:open() 函数的 errors 参数

可取值

描述

strict 或 None

如果有编码错误,引发 ValueError 异常

ignore

忽略错误

replace

在出现畸形数据的地方插入替代符号

surrogateescape

将任何不正确的字节以 Unicode Private Use Area 中的代码点表示

xmlcharrefreplace

编码不支持的字符会用适当的 XML 字符替换,只支持写入文件

backslashreplace

使用反斜杠转义序列替换畸形数据

namereplace

使用\n{…}转义序列替换不支持的字符,只支持写入文件

newline 用于控制通用换行模式如何运行(只支持文本模式),取值可以是 None、(空串)、\n、\r 和 \r\n。当读取输入时,如果取值为 None,启用通用换行模式,输入中的行尾可以是 \n、\r或\r\n,在返回给调用者前会被转换为\n;如果参数值是(空串)也将启用通用换行模式,但是返回给调用者时行尾不做转换;

如果取值为其他任意合法值,输入行以给定字符串结束,返回给调用者时行尾也不做转换。当输出写入时,如果取值为None,任意写入的\n将被转换为系统默认的行分隔符;如果取值为(空串)或 \n,不进行转换;如果取值为其他任意合法值,所有写入的 \n 字符将转换为给定字符串。

closefd 指明关闭文件时文件描述符的状态。若 closefd 为 False,且给定文件描述符(注意不是文件名),则当文件关闭时文件描述符将保持打开。若给定文件名,则 closefd 必须为 True(默认),否则将引发错误。

opener 用于传递调用一个自定义打开器,通过调用 opener 获取文件对象的文件描述符。

以下代码使用内置支持的 file 对象展示了常见的文件操作:

#打开文件

f = open("test.txt", "w+")

#获取文件描述符

print(f.fileno())

#写入文本

f.write("Python 语言很强大。\n是的,的确非常强大!\n")

#关闭文件

f.close()

#以只读方式打开文件

f = open("test.txt", "r")

#读取文件内容并输出至终端屏幕

print(f.read())

#关闭打开的文件

f.close()

上述代码的运行结果如下所示:

>>> f = open("test.txt", "w+")

>>> print(f.fileno())

3

>>> f.write("Python 语言很强大。\n是的,的确非常强大!\n")

25

>>> f.close()

>>> f = open("test.txt", "r")

>>> print(f.read())

Python 语言很强大。

是的,的确非常强大!

>>> f.close()

生成的 test.txt 文件的内容如下所示:

Python 语言很强大。

是的,的确非常强大!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值