Python 读取文件

Python 读取文件

要使用Python编程从文件中读取数据,首先必须打开它。使用内置的open()函数:

file object = open(file_name [, access_mode][, buffering])

下面是参数细节-

  • file_name -file_name参数是一个包含您想要访问的文件的名称的字符串值。

  • access_mode -access_mode确定了文件应该打开的模式,例如读取、写入、追加等。这是一个可选参数,默认文件访问模式为读取(r)。

这两个语句是相同的-

fo = open("foo.txt", "r")
fo = open("foo.txt")

使用File对象的read()方法读取打开文件中的数据。重要的是要注意,Python字符串除了文本数据外,还可以包含二进制数据。

语法

fileObject.read([count])

参数

  • count − 要读取的字节数。

这里传递的参数是要从打开的文件中读取的字节数。这个方法从文件的开头开始读取,如果缺少计数参数,则尝试读取尽可能多的内容,直到文件结束。

示例

# Open a file
fo = open("foo.txt", "r")
text = fo.read()
print (text)

# Close the opened file
fo.close()

它将产生以下的 输出

Python is a great language.
Yeah its great!!

以二进制模式读取

默认情况下,对文件对象的读/写操作是针对文本字符串数据的。如果我们想处理不同类型的文件,如媒体文件(mp3)、可执行文件(exe)、图片文件(jpg)等,我们需要在读/写模式前添加’b’前缀。

假设 test.bin 文件已经使用二进制模式写入。

f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()

我们需要使用“rb”模式来读取二进制文件。在打印之前,read()方法的返回值将首先解码。

f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))

它将产生以下 输出

Hello World

从文件中读取整数数据

为了将整数数据写入二进制文件中,应该使用to_bytes()方法将整数对象转换为字节。

n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)

为了从二进制文件中读取数据,可以使用from_bytes()函数将read()函数的输出转换为整数。

f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)

从文件中读取浮点数数据

对于浮点数数据,我们需要使用Python标准库中的 struct 模块。

import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)

从read()函数中解包字符串以从二进制文件中提取浮点数据。

f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)

使用r+模式

当一个文件被用于读取(使用’r’或’rb’)时,无法向其中写入数据。在进行其他操作之前,我们需要关闭文件。为了同时执行这两种操作,我们需要在模式参数中添加’+’字符。因此,’w+’或’r+’模式可以在不关闭文件的情况下使用write()和read()方法。

文件对象也支持seek()函数,以将流倒回到任意字节位置进行读取。

seek()方法的语法如下:

fileObject.seek(offset[, whence])

参数

  • offset − 这是文件中读/写指针的位置。

  • whence − 这是可选的,默认为0,表示绝对文件定位,其他值为1表示相对于当前位置的查找,2表示相对于文件末尾的查找。

让我们使用seek()方法来展示如何从特定的字节位置读取数据。

示例

该程序以w+模式(读写模式)打开文件,添加一些数据。然后它在文件中寻找特定的位置,并用新文本覆盖其先前的内容。

fo=open("foo.txt","r+")
fo.seek(10,0)
data=fo.read(3)
print (data)
fo.close()

它将产生以下 输出

rat

Python同时读写

当以写入(’w’或’a’)的方式打开文件时,不可能从中读取,反之亦然。这样做会引发不支持操作错误。在执行其他操作之前,我们需要关闭文件。

为了同时执行这两个操作,我们必须在mode参数中添加’+’字符。因此,’w+’或’r+’模式可以使用write()和read()方法而不关闭文件。文件对象还支持seek()函数,以将流重置到任何所需的字节位置。

seek()方法

seek()方法将文件的当前位置设置为指定的偏移量。whence参数是可选的,默认为0,表示绝对文件定位,其他值为1表示相对于当前位置的查找,2表示相对于文件结尾的查找。

该方法没有返回值。请注意,如果文件以追加方式打开(使用’a’或’a+’),任何seek()操作都将在下一次写入时被撤消。

如果文件仅以追加模式打开,并启用了读取(模式’a+’),则该方法本质上是无操作的,但对于以追加模式打开且启用了读取的文件(模式’a+’),它仍然有用。

如果以文本模式(’t’)打开文件,只有由tell()返回的偏移量是合法的。使用其他偏移量会导致未定义的行为。

请注意,并非所有文件对象都支持seek操作。

语法

seek()方法的语法如下:

fileObject.seek(offset[, whence])

参数

  • offset - 这是文件中读写指针的位置。

  • whence - 这是可选的,默认为0,表示绝对文件定位,其他值为1表示相对于当前位置的查找,2表示相对于文件末尾的查找。

让我们使用seek()方法来展示如何在文件上同时进行读写操作。

下面的程序以w+模式打开文件(即读写模式),添加一些数据。然后在文件中寻找特定位置,并使用新文本覆盖其之前的内容。

示例

# Open a file in read-write mode
fo=open("foo.txt","w+")
fo.write("This is a rat race")
fo.seek(10,0)
data=fo.read(3)
fo.seek(10,0)
fo.write('cat')
fo.seek(0,0)
data=fo.read()
print (data)
fo.close()

输出

This is a cat race

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程