鱼C论坛

 找回密码
 立即注册
查看: 1648|回复: 3

[已解决]python作业53课后习题

[复制链接]
发表于 2023-7-18 12:54:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
f.seek(5),这样写程序指针是不是就到第五个字母那里了,所以截断文件之后是不是应该从第六个截断到第15个,也就是FishBFishC。但是程序执行完是从第一个开始截断到第15个,截断的结果是FishAFishBFishC。请教大佬,是不是我对f.seek()的理解有误,速查宝典翻了几遍都没看到seek这个函数,去哪里能看到seek的用法
最佳答案
2023-7-18 12:55:10
f.seek(offset) 是Python文件处理的一个重要方法,它用于改变文件读取或写入的位置。 offset 参数表示偏移量,该参数可以是正数或负数。正数表示向文件末尾移动,负数表示向文件开头移动。

f.seek(5) 表示将文件的指针移动到文件的第5个字节位置,也就是说,下一次读取或写入将从第6个字节开始。

关于你的问题, f.seek(5) 后,程序指针确实会到第五个字节那里。但是关于截断,你可能在使用 f.truncate(size) 方法。这个方法的作用是将文件截断为 size 个字节。如果省略了 size 参数,那么默认就是从当前文件指针的位置开始截断到文件末尾。

所以如果你的程序执行了 f.seek(5) ,然后调用了 f.truncate() (没有指定大小),文件将会从第六个字节开始被截断,因为此时的文件指针处在第五个字节的位置。

但如果执行了 f.seek(5) ,然后调用了 f.truncate(15) ,那么整个文件将被截断为15个字节,因为 f.truncate(15) 表示将文件截断为15个字节,而不管当前文件指针的位置在哪里。

至于你提到的结果,可能需要查看你的具体代码,看一下你在执行 f.seek(5) 之后做了什么,以及在什么时候调用了 f.truncate() 。

在Python官方文档里,你可以找到关于 seek 和 truncate 等文件操作方法的详细信息,包括它们的定义和用法。这是Python官方文档的链接:https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects。
7.18-1.png
7.18-2.png
7.18-3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-18 12:54:58 | 显示全部楼层
f.seek() 函数用于移动文件指针的位置。具体来说,f.seek(5) 表示将文件指针移动到文件的第 5 个字节(而不是第 5 个字符)处。

在默认情况下,文件以二进制模式打开,每个字符占用一个字节。所以如果你调用 f.seek(5),文件指针会移动到第 6 个字符的位置。

关于截断文件的问题,f.seek() 只是移动文件指针,并不会影响截断操作。要截断文件,你需要使用 f.truncate() 方法,它会从当前文件指针位置截断文件。如果你想截断文件并保留从第 6 个字符开始到第 15 个字符的内容,可以按照以下方式实现:
with open('file.txt', 'r+') as f:    f.seek(5)  # 将文件指针移动到第 6 个字符处    f.truncate(15)  # 从当前文件指针位置截断文件到第 15 个字符处
这样执行完毕后,文件内容会变为 FishAFishBFishC

关于 b]seek()[/b] 和其他文件操作的更多详细信息,你可以参考 Python 官方文档中关于文件对象的说明:[https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

希望能帮到你,如果你还有其他问题,请随时提问!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 12:55:10 | 显示全部楼层    本楼为最佳答案   
f.seek(offset) 是Python文件处理的一个重要方法,它用于改变文件读取或写入的位置。 offset 参数表示偏移量,该参数可以是正数或负数。正数表示向文件末尾移动,负数表示向文件开头移动。

f.seek(5) 表示将文件的指针移动到文件的第5个字节位置,也就是说,下一次读取或写入将从第6个字节开始。

关于你的问题, f.seek(5) 后,程序指针确实会到第五个字节那里。但是关于截断,你可能在使用 f.truncate(size) 方法。这个方法的作用是将文件截断为 size 个字节。如果省略了 size 参数,那么默认就是从当前文件指针的位置开始截断到文件末尾。

所以如果你的程序执行了 f.seek(5) ,然后调用了 f.truncate() (没有指定大小),文件将会从第六个字节开始被截断,因为此时的文件指针处在第五个字节的位置。

但如果执行了 f.seek(5) ,然后调用了 f.truncate(15) ,那么整个文件将被截断为15个字节,因为 f.truncate(15) 表示将文件截断为15个字节,而不管当前文件指针的位置在哪里。

至于你提到的结果,可能需要查看你的具体代码,看一下你在执行 f.seek(5) 之后做了什么,以及在什么时候调用了 f.truncate() 。

在Python官方文档里,你可以找到关于 seek 和 truncate 等文件操作方法的详细信息,包括它们的定义和用法。这是Python官方文档的链接:https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 14:43:12 | 显示全部楼层
在Python中,`f.seek(offset)` 方法用于改变文件读写指针的位置。`offset` 是相对于文件开头的偏移量,以字节为单位。所以 `f.seek(5)` 会将文件指针移动到文件的第六个字节。这是因为在计算机编程中,计数通常是从0开始的,所以offset为5实际上是指第6个字节。

而关于你的截断问题,如果你使用了 `f.truncate(size)` 方法,那么它会将文件裁剪为 `size` 字节的大小。如果 `size` 大于当前文件大小,则保持原样。如果 `size` 小于当前文件大小,则额外的数据将被丢弃。注意,`f.truncate(size)` 并不会移动文件指针,所以在你执行 `f.truncate(size)` 之后,文件指针的位置仍然保持在truncate之前的位置。

不过要注意,你提到的 "FishAFishBFishC" 看起来像是字符而不是字节。一个字符可能占用多个字节,这取决于你的编码方式。例如,在UTF-8编码中,一个字符可以占用1到4个字节。所以在使用 `f.seek()` 和 `f.truncate()` 时,你需要清楚你处理的是字节还是字符。

关于`seek()`的用法,你可以查看Python的官方文档,或者直接在Python shell中使用`help(file.seek)`进行查询。在Python官方文档中有关于内置函数open的详细说明  包含`seek`和其他文件操作方法。

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表