Python 读取文件
要使用Python编程从文件中读取数据,首先必须打开它。使用内置的open()函数:
下面是参数细节-
- file_name -file_name参数是一个包含您想要访问的文件的名称的字符串值。
-
access_mode -access_mode确定了文件应该打开的模式,例如读取、写入、追加等。这是一个可选参数,默认文件访问模式为读取(r)。
这两个语句是相同的-
使用File对象的read()方法读取打开文件中的数据。重要的是要注意,Python字符串除了文本数据外,还可以包含二进制数据。
语法
参数
- count − 要读取的字节数。
这里传递的参数是要从打开的文件中读取的字节数。这个方法从文件的开头开始读取,如果缺少计数参数,则尝试读取尽可能多的内容,直到文件结束。
示例
它将产生以下的 输出 −
以二进制模式读取
默认情况下,对文件对象的读/写操作是针对文本字符串数据的。如果我们想处理不同类型的文件,如媒体文件(mp3)、可执行文件(exe)、图片文件(jpg)等,我们需要在读/写模式前添加’b’前缀。
假设 test.bin 文件已经使用二进制模式写入。
我们需要使用“rb”模式来读取二进制文件。在打印之前,read()方法的返回值将首先解码。
它将产生以下 输出 。
从文件中读取整数数据
为了将整数数据写入二进制文件中,应该使用to_bytes()方法将整数对象转换为字节。
为了从二进制文件中读取数据,可以使用from_bytes()函数将read()函数的输出转换为整数。
从文件中读取浮点数数据
对于浮点数数据,我们需要使用Python标准库中的 struct 模块。
从read()函数中解包字符串以从二进制文件中提取浮点数据。
使用r+模式
当一个文件被用于读取(使用’r’或’rb’)时,无法向其中写入数据。在进行其他操作之前,我们需要关闭文件。为了同时执行这两种操作,我们需要在模式参数中添加’+’字符。因此,’w+’或’r+’模式可以在不关闭文件的情况下使用write()和read()方法。
文件对象也支持seek()函数,以将流倒回到任意字节位置进行读取。
seek()方法的语法如下:
参数
- offset − 这是文件中读/写指针的位置。
-
whence − 这是可选的,默认为0,表示绝对文件定位,其他值为1表示相对于当前位置的查找,2表示相对于文件末尾的查找。
让我们使用seek()方法来展示如何从特定的字节位置读取数据。
示例
该程序以w+模式(读写模式)打开文件,添加一些数据。然后它在文件中寻找特定的位置,并用新文本覆盖其先前的内容。
它将产生以下 输出 –
Python同时读写
当以写入(’w’或’a’)的方式打开文件时,不可能从中读取,反之亦然。这样做会引发不支持操作错误。在执行其他操作之前,我们需要关闭文件。
为了同时执行这两个操作,我们必须在mode参数中添加’+’字符。因此,’w+’或’r+’模式可以使用write()和read()方法而不关闭文件。文件对象还支持seek()函数,以将流重置到任何所需的字节位置。
seek()方法
seek()方法将文件的当前位置设置为指定的偏移量。whence参数是可选的,默认为0,表示绝对文件定位,其他值为1表示相对于当前位置的查找,2表示相对于文件结尾的查找。
该方法没有返回值。请注意,如果文件以追加方式打开(使用’a’或’a+’),任何seek()操作都将在下一次写入时被撤消。
如果文件仅以追加模式打开,并启用了读取(模式’a+’),则该方法本质上是无操作的,但对于以追加模式打开且启用了读取的文件(模式’a+’),它仍然有用。
如果以文本模式(’t’)打开文件,只有由tell()返回的偏移量是合法的。使用其他偏移量会导致未定义的行为。
请注意,并非所有文件对象都支持seek操作。
语法
seek()方法的语法如下:
参数
- offset - 这是文件中读写指针的位置。
-
whence - 这是可选的,默认为0,表示绝对文件定位,其他值为1表示相对于当前位置的查找,2表示相对于文件末尾的查找。
让我们使用seek()方法来展示如何在文件上同时进行读写操作。
下面的程序以w+模式打开文件(即读写模式),添加一些数据。然后在文件中寻找特定位置,并使用新文本覆盖其之前的内容。