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

我有一个名为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="http://img.zgserver.com/python/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文件。

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

两个值都是正确的:

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