为什么os.path.getsize给我错误的大小?

时间:2014-10-28 08:24:58

标签: python windows

我有一个名为home.html的小型html文件,我发现os.path.getsize('home.html')提供的数字与len(open('home.html').read())不同。 os.path.getsize给出的数字是925,而len给出的数字是910.我知道910是正确的数字而不是925,因为使用925使用chrome不能显示页面,但它完美地使用910.任何人都可以向我解释出现了什么问题吗?

inb4我不认为这是一个unicode的事情,因为我在Windows上,我使用python 2.7,file.read的结果是str不是unicode对象,我的html中的所有字符都是ASCII。以下是home.html的内容:

<!DOCTYPE html>
<html>
<body style="text-align:center;">
<a href="https://github.com/ChrisCalderon/Yashttpd">
<img style="position:absolute;top:0;right:0;border:0;" src="https://camo.githubusercontent.com/a6677b08c955af8400f44c6298f40e7d19cc5b2d/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677261795f3664366436642e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png">
</a>
<h1>ECHO SERVER</h1>
<p>This is how requests are parsed:</p>
<iframe src="echo" style="border:none;width:40%;height:325px;" scrolling="off">
    If you see the text, your browser doesn't support iframes!
</iframe>
<p>The whole code for this site is <a href="myhandler.html">here</a>!</p>
<p>This is all built with Yashttpd. Find it in my GitHub repository by clicking the ribbon above!</p>
</body>
</html>

编辑: 我想提一下,os.path.getsize似乎可以正常使用我的favicon.ico文件。

1 个答案:

答案 0 :(得分:3)

该文件有15行,您在磁盘的大小和内存中的 之间的差异为15。在Windows上,行尾是序列"\r\n",但是当你读它时(除非你使用二进制模式打开文件)Python(或底层例程)在Python的行尾转换那些序列只有"\n"

两个值都是正确的:

  • 该文件在磁盘上长925字节,行以\r\n
  • 结尾
  • 该文件在内存中长度为910字节,行仅以\n
  • 结尾