为什么以二进制格式写入文件导致不同大小的文件?

时间:2014-03-13 05:08:23

标签: python

我将下载的文件以两种方式写入文件,一种是在" w" ,另一个是" wb"。

from urllib.request import urlopen
url="http://quotes.money.163.com/service/lrb_000559.html"  
html=urlopen(url)
outfile=open("g:\\000559a.csv","w")
outfile.write(html.read().decode("gbk"))
outfile.close()
html=urlopen(url)
outfile=open("g:\\000559b.csv","wb")
outfile.write(html.read())
outfile.close()

为什么选择" wb"导致不同大小的文件?请参阅附件。 更混乱的是,实际上g:\ 000559a.csv是6976字节,而不是控制台中的6575; g:\ 000559b.csv是6931,与控制台中的6931相同。 控制台中的输出与文件管理器中的输出不同。

enter image description here

2 个答案:

答案 0 :(得分:0)

我一眼就能看到您将内容解码为str类型,并且该模式下的写入操作返回标准模式下的unicode字符数,而不是下面的总字节数。二进制模式。您可以通过以下方式验证已解码str的长度:

>>> s = html.read().decode("gbk")
>>> len(s)
6575

它与报告的字符的数量相匹配。

答案 1 :(得分:0)

在Windows下的默认(文本)模式下,将从输出中删除回车符\x0d。这在二进制模式下不会发生。