在Python中设置文件偏移
先决条件: seek() , tell()
Python使得用最少的代码创建/编辑文本文件变得非常容易。要访问文本文件,我们必须创建一个文件句柄,它将在文本文件的开头产生一个偏移量。简单的说, offset就是读/写指针在文件中的位置。偏移量稍后用于根据给定的权限在文本文件中执行操作,例如读取、写入等。
在开始之前,让我们回顾一下文件处理的一些基本方法:
- seek() :在Python中,seek()函数用于将文件句柄的位置更改为给定的特定位置。文件句柄就像一个游标,它定义了必须在文件中读取或写入数据的位置。
Syntax: f.seek(offset, from_what), where f is file pointer
Parameters:
Offset: Number of positions to move forward
from_what: It defines point of reference.
- tell():访问模式控制在打开的文件中可能进行的操作类型。它指的是文件打开后的使用方式。这些模式还定义了文件句柄在文件中的位置。文件句柄就像一个游标,它定义了必须从哪里读取或写入文件中的数据。有时了解文件句柄的位置对我们来说很重要。 tell() 方法可用于获取文件句柄的位置。 tell() 方法返回文件对象的当前位置。此方法不接受任何参数并返回一个整数值。最初文件指针指向文件的开头(如果没有以追加模式打开)。因此,tell() 的初始值为零。
Syntax : f.tell()
Return: This method returns the current position of the file read/write pointer within the file.
让我们通过逐步实施来理解这一点:
第一步:创建一个文本文件。
让我们创建一个包含多封电子邮件的文本文件“emails.txt”来演示 offset 的工作:
Python3
# WRITING OPERATIONS
# creates a file named emails.txt
fhand = open("emails.txt", "w")
# this enters the values into the file
fhand.write('''stephen.marquard@uct.ac.za
stephen.marquard@uct.ac.za
louis@media.berkeley.edu
louis@media.berkeley.edu
louis@media.berkeley.edu
louis@media.berkeley.edu
ray@media.berkeley.edu
ray@media.berkeley.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu''')
# closing the file
fhand.close()
Python3
# opening the file with reading permissions
fhand = open("emails.txt", "r")
# print the content of the whole file
print(fhand.read())
# close the file
fhand.close()
Python3
# open the file
fhand = open("emails.txt", "r")
# check default value of offset
print(f"The default position of offset is: {fhand.tell()}")
Python3
# reading first nth characters
n = 40
characters = fhand.read(n)
print(f"First {n} Characters : ", characters)
Python3
# Checking the current offset/position
offset = fhand.tell()
print("Current position of the offset:", offset)
Python3
# Repositioning the offset to the beginning
offset = fhand.seek(0)
print("Offset after using seek function : ", offset)
# closing the file
fhand.close()
这将创建一个文件“emails.txt”并用电子邮件填充它。
第 2 步:让我们通过编写以下代码检查我们刚刚创建的 emails.txt 文件的内容:
蟒蛇3
# opening the file with reading permissions
fhand = open("emails.txt", "r")
# print the content of the whole file
print(fhand.read())
# close the file
fhand.close()
输出:
第 3 步:
创建“emails.txt”文件后。我们通过再次打开它来读取它,这一次具有读取权限,这将一个名为“fhand”的偏移量设置到文件的开头,即位置 0。我们可以使用以下代码进行检查:
蟒蛇3
# open the file
fhand = open("emails.txt", "r")
# check default value of offset
print(f"The default position of offset is: {fhand.tell()}")
输出:
The default position of offset is: 0
第 4 步:我们编写一个程序,要求用户从文件的开头输入他们希望看到的字符数。
蟒蛇3
# reading first nth characters
n = 40
characters = fhand.read(n)
print(f"First {n} Characters : ", characters)
输出:
First 40 Characters : stephen.marquard@uct.ac.za
stephen.marqu
这里我输入显示40个字符。
第 5 步:然后我们使用 tell()函数检查偏移量的位置。我们使用这个代码:
蟒蛇3
# Checking the current offset/position
offset = fhand.tell()
print("Current position of the offset:", offset)
输出:
Current position of the offset: 41
通过覆盖 40 个字符,偏移量现在获得第 41 个位置。
第 6 步:现在,如果我们想将偏移量的当前位置更改为我们想要的任何位置,我们可以使用seek()函数来做到这一点。通过传递我们希望偏移量所在的位置,作为搜索函数的参数,我们可以使偏移量跳转到该位置。我们可以使用此代码进行确认:
蟒蛇3
# Repositioning the offset to the beginning
offset = fhand.seek(0)
print("Offset after using seek function : ", offset)
# closing the file
fhand.close()
输出:
Offset after using seek function : 0
正如我们在上面的代码中看到的,当我们在 set函数中给定参数“0”时,偏移量会跳转到文件的开头。输出中显示的偏移值将是: