【发布时间】:2012-06-26 14:01:19
【问题描述】:
对于输入文本文件,我知道 .seek 和 .tell 通常都使用字节进行操作 - 也就是说,.seek 查找与其给定参数指定的点相关的一定数量的字节,并且 .tell 返回自文件开头以来的字节数。
我的问题是:在使用其他编码(如 utf-8)时,这是否同样有效?例如,我知道 utf-8 需要几个字节来表示某些字符。
如果这些方法在解析 utf-8 文件时仍然处理字节,那么可能会导致意外的行为(例如,光标可能最终位于字符的多字节编码或多字节字符中可以注册为多个字符)。
如果是这样,是否有其他方法可以完成相同的任务?特别是在解析文件时需要有关光标位置的字符信息。
另一方面,如果你在 open() 函数中指定编码...
infile = open(filename, encoding='utf-8')
.seek 和 .tell 的行为会改变吗?
【问题讨论】:
-
好问题。你为什么不测试一下?保存一个包含 2-3 个中文字符的文本文件(使用谷歌翻译来获取这些字符),然后创建一个程序来打开它,执行 seek(1),然后从那里打印,看看会发生什么。
-
谢谢!我一直在使用 utf-8 格式的文件进行测试,该文件几乎只填充了一个字节的字符 - 我没想过专门为此目的制作一个。
-
“我使用的是 Python 2.7.3。” - 不,你不是因为在 python 2.7 open() 中没有
encoding关键字参数。 -
我看到其他人使用 encoding 关键字,所以我想知道这是否会影响 infile 的方法在使用时的工作方式。起初我没有意识到 encoding 关键字不属于 Python 2.7。但是,我会删除违规行以避免混淆。