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管理的文件*
,而文件*
可能有它自己的位置和缓冲区,因此它甚至不必进入操作系统/文件系统进行后续读取。感谢您的分享。这是一个非常重要的信息比我给出的示例更简单的实现。