新书

速递

吴老的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群

[email protected]

python群:457561756

性能群:415987441

招聘群:203715128

感谢认真阅读的你!

?

推荐阅读:

相关文章