今天要用到f.truncate函数, 但对其功能不是很熟悉, 就查了一下资料.
先是在idle中打开了一个文件, 用help(f.truncate)查看一下:
>>> help(f.truncate)
Help on built-in function truncate:
truncate(pos=None, /) method of _io.BufferedWriter instance
Truncate file to size bytes.
File pointer is left unchanged. Size defaults to the current IO
position as reported by tell(). Returns the new size.
感觉语焉不详, 形参为pos, 但说明里说的是size.
然后又上网搜到一个链接, https://blog.youkuaiyun.com/yandajiangjun/article/details/102307205
讲得也很浅显, 收藏数量也很高, 当时以为自己看懂了, 还自己总结了一下.
刚好那时有闲, 就验证了一番, 发现全然不是那么回事, 上面那篇文章中的验证方法和结论中错误很多!
我的验证过程就不多写了, 有闲的人也可以自己验证一下, 下面只给出我自己得出的结论:
f.truncate(size)
//返回截取后的尺寸. 总是从头开始, 如果指定尺寸则按尺寸截取; 如果未指定, 则截取到当前位置;
//调用f.readline()后, 对于f.truncate, 当前位置总在最后的位置(对于r+打开模式); 所以要想准确使用, 最好在rb+模式下
f.seek(0, 2)
//在文件中找到最后的位置(0代表偏移, 2代表whence中的最后)
//如果出现io.UnsupportedOperation: can’t do nonzero end-relative seeks 这个错误(指定了负偏移), 主要是因为在python3和python2的问题, 该程序在Python2中是不会报错的, Python3则会报错. 因为Pyhon3在文本文件中, 没有使用b模式选项打开的文件, 只允许从文件头开始计算相对位置, 从文件尾计算时就会引发异常; 在开始使用open打开文件时候, 将打开方式从r, 换成rb即可, 即: f = open(“test.txt”,“rb”) 如果使用seek, 这里必须使用rb
参考文档: https://blog.youkuaiyun.com/weixue9/article/details/112259365
本文探讨了Python中的f.truncate()函数,用于截取文件到指定大小。通过实例解析了该函数的工作原理,指出了一些常见误解,如参数实际表示的是截取的尺寸而非位置。同时,强调了在不同文件模式下使用该函数的注意事项,特别是在文本文件中可能遇到的错误。建议在使用时配合f.seek(0,2)找到文件末尾,并在rb+模式下操作以避免错误。
714

被折叠的 条评论
为什么被折叠?



