Python实战:file tell()返回的指针怎么就不一样?
新书
速递
吴老的java版《selenium webdriver 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。
文 | 黎扶澈
python file tell()
函数
在windows与mac上的差异
0
1
file tell( )
方法
tell( )
方法返回文件的游标位置,即文件指针当前位置。
0
2
遇到的问题
在使用中发现:同样的.txt文件内容和.py文件,在Mac上和Windows上运行的结果不同,
即tell()返回的结果不一致。
测试文件内容如下
:
good evening!ryroad212
测试代码如下
:
with open("file.txt", "r", encoding="utf-8") as fp: print(fp.tell()) print(fp.readline()) print(fp.tell()) print(fp.readline()) print(fp.tell())
在windows上
运行结果如下:
在mac上
运行结果如下:
0
3
问题出现的原因
为了弄清楚为什么
tell( )
方法在windows与mac上返回的结果不一致,我们分别在windows和mac上运行如下代码:
import osos.lineseplen(os.linesep)
windows
运行结果:
mac
运行结果:
Tips:os.linesep返回当前平台使用的行终止符。
如上图所示,
Windows使用"
",Mac使用"
"。
官网解释为「The string used to separate (or, rather, terminate) lines on thecurrent platform. 」
综上所述,tell()方法在windows与mac上返回的结果不一致的原因是:
在
windows平台
上,文件第一行「goodevening!"其实等于"goodevening!
",共15个字元
,而tell()是从0开始计算的,所以在读取完第一行后,游标指向文件第二行的首个字元"r",所以返回15。
在
mac平台
上,文件第一行「goodevening!"其实等于"goodevening!
",共14个字元
,所以返回14。
0
4
扩展内容
微软的自带记事本程序notepad.exe会给
UTF-8编码的文件头加入三个隐藏的位元组(即BOM)
。就是为了让编辑器不去猜测文件本身是ASCII码还是UTF-8。所以会出现以下情况:
tell()返回18,由正常的15+3个隐藏BOM位元组组成。
使用notepad++编辑,将文件保存为utf-8 without BOM,即可解决此问题。
(The End)
文章发不发我说了算,
代码练不练你说了算,
工资涨不涨领导说了算!
草根在测试行业如何杀出一条血路(2)
点此链接了解
2018web测试开发培训一年期周六班!
请
在
喜马拉雅
app搜索并收听「
光荣之路
」电台光荣之路
招聘|征稿|合作
|QQ群
python群:457561756
性能群:415987441
招聘群:203715128
感谢认真阅读的你!
?
推荐阅读: