python - TextIOWrapper.tell 会在文件开头可靠地返回零吗?
问题描述
TextIOBase.tell的文档,从中TextIOWrapper
继承,状态
将当前流位置作为不透明数字返回。该数字通常不代表底层二进制存储中的字节数。
我想知道,在文件指针位于文件开头的特定情况下,它是否总是返回零?
我写了一个小的、非详尽的脚本来检查一些明显的场景,每个案例都返回零:
import io
import os
rmodes = ['a', 'a+', 'r', 'r+']
wmodes = ['w', 'w+', 'a', 'a+', 'x', 'x+']
for m in wmodes:
with open('empty.txt', m) as f:
print(m, f.tell())
os.system('rm empty.txt')
for m in rmodes:
open('not-empty.txt', 'w').write('abc\n')
with open('non-empty.txt', m) as f:
f.seek(0, io.SEEK_SET)
print(m, f.tell())
if m == 'r':continue # avoid exception
with open('non-empty.txt', m) as f:
f.truncate()
print(m, f.tell())
我相信 这段代码是用来生成的返回值tell
static PyObject *
textiowrapper_build_cookie(cookie_type *cookie)
{
unsigned char buffer[COOKIE_BUF_LEN];
memcpy(buffer + OFF_START_POS, &cookie->start_pos, sizeof(cookie->start_pos));
memcpy(buffer + OFF_DEC_FLAGS, &cookie->dec_flags, sizeof(cookie->dec_flags));
memcpy(buffer + OFF_BYTES_TO_FEED, &cookie->bytes_to_feed, sizeof(cookie->bytes_to_feed));
memcpy(buffer + OFF_CHARS_TO_SKIP, &cookie->chars_to_skip, sizeof(cookie->chars_to_skip));
memcpy(buffer + OFF_NEED_EOF, &cookie->need_eof, sizeof(cookie->need_eof));
return _PyLong_FromByteArray(buffer, sizeof(buffer),
PY_LITTLE_ENDIAN, 0);
}
显然,它计算的不仅仅是文件指针距文件开头的偏移量。但是这段代码会在文件的开头总是返回零吗?在什么情况下它不会?
我是
- 意识到行为是依赖于实现的,文档不保证
- 专门询问文本文件中的行为,而不是二进制文件
- 不问“我怎么知道我是否在 Python 文件的开头?”
- 不要求获取文件指针位置的替代方法
解决方案
推荐阅读
- java - Kafka 消费者以不可读的格式显示数字
- mysql - 从 Mysql 表中查询所有行并存储为缓存
- ios - iOS - 如何在 iOS 12 中执行 sharedSecretFromKeyAgreement
- reactjs - 无法使用 XAMPP 部署 React 项目
- python - 暂停数据流的循环以进行进一步操作
- ios - 字符串数组除外时使用 LazyMapSequence
- java - 如何同时修改多个 EditText 的输入,因为我只修改一个?
- javascript - Azure 网站加载 JSON 文件失败
- scala - 为什么需要 scala 猫中的 Functor
- flutter - 使用 mapbox 插件添加自定义标记以在颤振中映射