python内置函数 O
Python 解释器内置了很多函数和类型,任何时候都能使用。
O
名称 | 描述 |
---|---|
object | 返回一个不带特征的新对象。 |
oct | 将一个整数转换为八进制(octal)表示形式的字符串。 |
open | 打开一个文件,并返回相应的文件对象。 |
ord | 返回单个字符的Unicode码点(即整数表示)。 |
object
class object
object
是所有类的基类,也就是“根类”。当你创建一个新的类并且没有明确地从其他类继承时,它默认会从 object
继承。
返回一个不带特征的新对象。object
是所有类的基类。它带有所有 Python 类实例均通用的方法。本函数不接受任何参数。
备注:由于 object
没有 __dict__
,因此无法将任意属性赋给 object
的实例。
class MyClass:
pass
print(issubclass(MyClass, object)) # 输出: True
oct(x)
oct()
是一个内置函数,用于将一个整数转换为八进制(octal)表示形式的字符串。八进制是一种基数为8的数制系统,它使用数字0到7来表示数值。
将整数转换为带前缀 “0o” 的八进制数字符串。 结果是一个合法的 Python 表达式。 如果 x 不是一个 Python int
对象,则它必须定义返回一个整数的 __index__()
方法。 例如:
>>> oct(8)
'0o10'
>>> oct(-56)
'-0o70'
若要将整数转换为八进制字符串,并可选择是否带有“0o”前缀,可采用如下方法:
>>> '%#o' % 10, '%o' % 10
('0o12', '12')
>>> format(10, '#o'), format(10, 'o')
('0o12', '12')
>>> f'{10:#o}', f'{10:o}'
('0o12', '12')
另见 format()
获取更多信息。
oct()
函数只能用于整数。如果你尝试将浮点数或其他非整数类型传递给 oct()
,Python 会抛出一个 TypeError
异常。
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
open()
是一个内置函数,用于打开一个文件,并返回相应的文件对象。通过这个文件对象,你可以进行读取、写入、追加等操作。
-
file
:要打开的文件名(包含路径,如果文件不在当前工作目录下)。 -
mod
:文件打开模式。常见的模式有:'r'
:读取模式(默认)。
-
'w'
:写入模式,会覆盖已存在的文件。'a'
:追加模式,写入的数据会被追加到文件的末尾。'b'
:二进制模式(可以与其它模式组合,如'rb'
或'wb'
)。'+'
:表示同时读写文件(可以与'r'
、'w'
、'a'
组合,如'r+'
、'w+'
、'a+'
)。
-
buffering
:缓冲策略。 -
encoding
:用于指定文件的字符编码,一般使用'utf-8'
。 -
errors
:指定编码错误的处理方式。 -
newline
:控制换行符的行为。 -
closefd
:如果文件描述符由open()
创建,则closefd
必须为True
(默认)。 -
opener
:一个自定义的开启器,必须具有(filename, flags) -> fd
的签名。
open()
函数会返回一个文件对象,你可以使用文件对象的 read()
、write()
、close()
等方法来操作文件。
打开 file 并返回对应的 file object。 如果该文件不能被打开,则引发 OSError
。 请参阅 读写文件 获取此函数的更多用法示例。
file 是一个 path-like object,表示将要打开的文件的路径(绝对路径或者相对当前工作目录的路径),也可以是要封装文件对应的整数类型文件描述符。(如果给出的是文件描述符,则当返回的 I/O 对象关闭时它也会关闭,除非将 closefd 设为 False
。)
mode 是一个指明文件打开模式的可选字符串。 它默认为 'r'
表示以文本模式读取。 其他常见模式有表示写入的 'w'
(若文件已存在则将其清空),表示独占创建的 'x'
,以及表示追加写入的 'a'
(在 某些 Unix 系统上,这意味着无论当前查找位置在哪里 所有 写入操作都将追加到文件末尾)。 在文本模式下,如果未指定 encoding 则所使用的编码格式将依赖于具体平台: locale.getencoding()
会被调用以获取当前语言区域的编码格式。 (对于读取和写入原始字节数据请使用二进制模式并且不要指定 encoding。) 可用的模式有:
字符 | 含意 |
---|---|
'r' | 读取(默认) |
'w' | 写入,并先截断文件 |
'x' | 排它性创建,如果文件已存在则失败 |
'a' | 打开文件用于写入,如果文件存在则在末尾追加 |
'b' | 二进制模式 |
't' | 文本模式(默认) |
'+' | 打开用于更新(读取与写入) |
默认模式为 'r'
(打开文件用于读取文本,与 'rt'
同义)。'w+'
和 'w+b'
模式将打开文件并清空内容。而 'r+'
和 'r+b'
模式将打开文件但不清空内容。
正如在 概述 中提到的,Python区分二进制和文本I/O。以二进制模式打开的文件(包括 mode 参数中的 'b'
)返回的内容为 bytes
对象,不进行任何解码。在文本模式下(默认情况下,或者在 mode 参数中包含 't'
)时,文件内容返回为 str
,首先使用指定的 encoding (如果给定)或者使用平台默认的的字节编码解码。
备注:Python不依赖于底层操作系统的文本文件概念;所有处理都由Python本身完成,因此与平台无关。
buffering 是一个可选的整数,用于设置缓冲策略。 传入 0 来关闭缓冲(仅在二进制模式下允许),传入 1 来选择行缓冲(仅在文本模式下写入时可用),传一个整数 > 1 来表示固定大小的块缓冲区的字节大小。 注意这样指定缓冲区的大小适用于二进制缓冲的 I/O,但 TextIOWrapper
(即用 mode='r+'
打开的文件) 会有另一种缓冲。 要禁用 TextIOWrapper
中的缓冲,请考虑为 io.TextIOWrapper.reconfigure()
使用 write_through
旗标。 当没有给出 buffering 参数时,默认的缓冲策略规则如下:
- 二进制文件以固定大小的块进行缓冲;缓冲区的大小是使用启发方式来尝试确定底层设备的“块大小”并会回退至
io.DEFAULT_BUFFER_SIZE
。 在许多系统上,缓冲区的长度通常为 4096 或 8192 字节。 - “交互式”文本文件(
isatty()
返回True
的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
encoding 是用于编码或编码文件的编码格式名称。 这应当只有文本模式下使用。 默认的编码格式依赖于具体平台 (即 locale.getencoding()
所返回的值),但是任何 Python 支持的 text encoding 都可以被使用。 请参阅 codecs
模块获取受支持的编码格式列表。
errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可以使用各种标准错误处理程序(列在 错误处理方案 ),但是使用 codecs.register_error()
注册的任何错误处理名称也是有效的。标准名称包括:
- 如果存在编码错误,
'strict'
会引发ValueError
异常。 默认值None
具有相同的效果。 'ignore'
忽略错误。请注意,忽略编码错误可能会导致数据丢失。'replace'
会将替换标记(例如'?'
)插入有错误数据的地方。'surrogateescape'
将把任何不正确的字节表示为 U+DC80 至 U+DCFF 范围内的下方替代码位。 当在写入数据时使用surrogateescape
错误处理句柄时这些替代码位会被转回到相同的字节。 这适用于处理具有未知编码格式的文件。'xmlcharrefreplace'
仅在写入文件时才受到支持。 编码格式不支持的字符将被替换为相应的 XML 字符引用&#*nnn*;
。'backslashreplace'
用Python的反向转义序列替换格式错误的数据。'namereplace'
(也只在编写时支持)用\N{...}
转义序列替换不支持的字符。
newline 决定如何解析来自流的换行符。 它可以为 None
, ''
, '\n'
, '\r'
和 '\r\n'
。 它的工作原理如下:
- 从流中读取输入时,如果 newline 为
None
,则启用通用换行模式。输入中的行可以以'\n'
,'\r'
或'\r\n'
结尾,这些行被翻译成'\n'
在返回呼叫者之前。如果它是''
,则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。 - 将输出写入流时,如果 newline 为
None
,则写入的任何'\n'
字符都将转换为系统默认行分隔符os.linesep
。如果 newline 是''
或'\n'
,则不进行翻译。如果 newline 是任何其他合法值,则写入的任何'\n'
字符将被转换为给定的字符串。
如果 closefd 为 False
且给出的不是文件名而是文件描述符,那么当文件关闭时,底层文件描述符将保持打开状态。如果给出的是文件名,则 closefd 必须为 True
(默认值),否则将触发错误。
可以通过传递可调用的 opener 来使用自定义开启器。然后通过使用参数( file,flags )调用 opener 获得文件对象的基础文件描述符。 opener 必须返回一个打开的文件描述符(使用 os.open
as opener 时与传递 None
的效果相同)。
新创建的文件是 不可继承的。
下面的示例使用 os.open()
函数的 dir_fd 的形参,从给定的目录中用相对路径打开文件:
>>> import os
>>> dir_fd = os.open('somedir', os.O_RDONLY)
>>> def opener(path, flags):
... return os.open(path, flags, dir_fd=dir_fd)
...
>>> with open('spamspam.txt', 'w', opener=opener) as f:
... print('This will be written to somedir/spamspam.txt', file=f)
...
>>> os.close(dir_fd) # don't leak a file descriptor
open()
函数所返回的 file object 类型取决于所用模式。 当使用 open()
以文本模式 ('w'
, 'r'
, 'wt'
, 'rt'
等) 打开文件时,它将返回 io.TextIOBase
(具体为 io.TextIOWrapper
) 的一个子类。 当使用缓冲以二进制模式打开文件时,返回的类是 io.BufferedIOBase
的一个子类。 具体的类会有多种:在只读的二进制模式下,它将返回 io.BufferedReader
;在写入二进制和追加二进制模式下,它将返回 io.BufferedWriter
,而在读/写模式下,它将返回 io.BufferedRandom
。 当禁用缓冲时,则会返回原始流,即 io.RawIOBase
的一个子类 io.FileIO
。
另请参阅文件操作模块,如 fileinput
、io
(声明了 open()
)、os
、os.path
、tempfile
和 shutil
。
引发一个 审计事件 open
附带参数 file
, mode
, flags
。
mode
与 flags
参数可以在原始调用的基础上被修改或传递。
在 3.3 版本发生变更:
- 增加了 opener 形参。
- 增加了
'x'
模式。 - 过去触发的
IOError
,现在是OSError
的别名。 - 如果文件已存在但使用了排它性创建模式(
'x'
),现在会触发FileExistsError
。
在 3.4 版本发生变更:
- 文件现在禁止继承。
在 3.5 版本发生变更:
- 如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发
InterruptedError
异常 (原因详见 PEP 475)。 - 增加了
'namereplace'
错误处理接口。
在 3.6 版本发生变更:
- 增加对实现了
os.PathLike
对象的支持。 - 在 Windows 上,打开一个控制台缓冲区将返回
io.RawIOBase
的子类,而不是io.FileIO
。
在 3.11 版本发生变更: 'U'
模式已被移除。
# 打开一个文件用于读取
with open('example.txt', 'r') as file:
content = file.read()
print(content)
# 打开一个文件用于写入,如果文件已存在则会被覆盖
with open('example.txt', 'w') as file:
file.write('Hello, world!')
# 打开一个文件用于追加内容
with open('example.txt', 'a') as file:
file.write('\nThis is appended text.')
# 以二进制模式打开一个文件用于读取
with open('image.png', 'rb') as file:
content = file.read()
# 这里可以对二进制数据进行处理,比如保存到数据库或发送到网络
# 打开一个文件用于读写
with open('example.txt', 'r+') as file:
content = file.read()
file.seek(0) # 将文件指针移回文件开头
file.write('Modified content.')
如果不使用 with
语句,你需要在操作完文件后显式调用 file.close()
来关闭文件。
ord(c)
ord()
是一个内置函数,用于返回单个字符的Unicode码点(即整数表示)。它接受一个长度为1的字符串作为参数,并返回该字符对应的Unicode码点。
对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。例如 ord('a')
返回整数 97
, ord('€')
(欧元符号)返回 8364
。这是 chr()
的逆函数。
# 获取字符 'A' 的Unicode码点
a_ord = ord('A')
print(a_ord) # 输出: 65
# 获取字符 '中' 的Unicode码点
zhong_ord = ord('中')
print(zhong_ord) # 输出: 20013 (取决于具体的编码和Python版本)
# 尝试获取多字符字符串的Unicode码点会抛出TypeError
try:
multi_char_ord = ord('AB')
except TypeError as e:
print(e) # 输出: ord() expected a character, but string of length 2 found
ord()
返回的是字符在当前编码下的Unicode码点。