Python';我们找功能工作?

Python';我们找功能工作?,python,seek,Python,Seek,如果我有一些类似文件的对象并执行以下操作: F = open('abc', 'r') ... loc = F.tell() F.seek(loc-10) seek做什么?是否从文件开头开始并读取loc-10字节?或者仅仅备份10个字节足够聪明吗?仅仅备份10个字节应该足够聪明,但我认为细节确实取决于您使用的文件系统/操作系统/运行时库 请注意,如果只想备份10个字节,则不需要tell F.seek(-10,1) 它是操作系统和libc特有的。file.seek()操作委托给实际操作系统级文件

如果我有一些类似文件的对象并执行以下操作:

F = open('abc', 'r')
...
loc = F.tell()
F.seek(loc-10)

seek做什么?是否从文件开头开始并读取
loc-10
字节?或者仅仅备份10个字节足够聪明吗?

仅仅备份10个字节应该足够聪明,但我认为细节确实取决于您使用的文件系统/操作系统/运行时库

请注意,如果只想备份10个字节,则不需要
tell

F.seek(-10,1)

它是操作系统和libc特有的。
file.seek()
操作委托给实际操作系统级文件的
fseek(3)
C调用。

根据:

file.seek(偏移量[,何处])

设置文件的当前位置,如stdio的fseek()。何处 参数是可选的,默认为os.SEEK_SET或0(绝对文件 定位);其他值为os.SEEK_CUR或1(相对于 当前位置)和os.SEEK_END或2(相对于文件的 (完)

假设您希望相对于您的位置返回10个字节:

file.seek(-10, 1)

根据文档,您需要执行
f.seek(偏移,从什么开始)
,或者在您的情况下,执行
f.seek(-10,loc)

您的示例应该有效,但这更为明确

file.seek() set the current read/write position.
file.tell() Returns the file's current position.
因此,当您执行
**loc=F.tell()**
时,您正在将当前文件位置存储到loc变量中

**file.seek()**
接受两个参数
**file.seek(偏移量,从)**

因此,您需要定义要偏移文件的位置<代码>**from**取下列值之一0,1,2(0=开始,1=当前,2=结束)


这就是它的工作原理。

这是一种误导。只有当
loc
为1时,这个答案才有效。那么这个平台和实现依赖于吗?是的,实现在libc和OS之间分开。那么不从文件的开头开始就可以/容易地做到这一点吗?在大多数平台中,文件位置只是存储在文件句柄表中的一个数字;没有实体驱动器正在进行。所以没有理由“只备份10个字节”。当您执行下一次读或写操作时,libc/OS/文件系统就可以实现智能化,并意识到您正在从仍在缓存中且根本不读取的块中读取,或者读取上一个块,因此它只需要查找一个块(这并不是说区别在现代驱动器上很重要,不管怎样,前一个虚拟块可能在LVM阵列中的另一个物理驱动器上……)。另外,请注意,这是一个
fseek
,而不是
lseek
,这意味着在操作系统上有一个由libc管理的
文件*
,而
文件*
可能有它自己的位置和缓冲区,因此它甚至不必进入操作系统/文件系统进行后续读取。感谢您的分享。这是一个非常重要的信息比我给出的示例更简单的实现。