我使用的是Pythonrequests模块来下载HTML页面. 对于我执行该语句response = requests.get(URL)的每个URL, 因此,任何GET请求的结果都会写入Response变量. 我执行这条语句来确定下载的HTML页面的字节数:len(response.text).我的 idea 是,只有在我的硬盘上没有同名的页面,或者有同名但大小不同的页面时,才将HTML保存到硬盘上.如果文件存在,我执行Path(filepath).stat().st_size来找出硬盘上文件的大小.问题就出现在这里.由于某种原因,对于任何下载的页面,文件的大小总是比调用具有response对象的text属性的len()函数的结果大6个字节.如果len()返回7282,则st_size为7288;如果len()返回7216,则st_size为7222,依此类推.我不明白这种行为的原因.我可以在len()的结果上加上6个字节来比较大小.我想,这会奏效,但我就不知道真正的原因了.这看起来像是黑客入侵.

我试着用curl命令下载页面,结果是一样的.增加了神奇的6个字节.我已经判断了10个不同的页面,6个字节的差异保持不变.

推荐答案

您观察到的差异可能是由于Python计算字符串中字节的方式与文件系统计算文件大小的方式之间的差异.Python的len()函数计算字符串中的字符数,而文件系统计算用于存储文件的字节数.

在Python中,字符串是Unicode字符的序列.当你对一个字符串调用len()时,它返回字符串中的字符数,而不是字节数.

另一方面,当您将一个字符串保存到文件时,它被存储为一个字节序列.根据使用的编码(如UTF-8),单个字符可能占用一个以上的字节.

当您使用Path(Filepath).stat().st_SIZE判断文件大小时,您将获得文件的大小(以字节为单位),其中包括用于编码字符的字节和任何潜在的元数据.

您看到6个字节的一致差异的原因可能是文件大小中包含了固定数量的元数据,但字符串长度中没有包含该元数据.

为了更准确地比较文件大小和字符串长度,可以在调用len()之前将字符串编码为字节,如下所示:len(response.text.encode('utf-8')).这将为您提供以字节为单位的长度,它应该更接近于文件大小.

Python相关问答推荐

如何比较numPy数组中的两个图像以获取它们不同的像素

对某些列的总数进行民意调查,但不单独列出每列

按列分区,按另一列排序

管道冻结和管道卸载

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

计算每个IP的平均值

启用/禁用shiny 的自动重新加载

无法连接到Keycloat服务器

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

在Python中使用if else或使用regex将二进制数据如111转换为001""

如何更改groupby作用域以找到满足掩码条件的第一个值?

幂集,其中每个元素可以是正或负""""

python panda ExcelWriter切换动态公式到数组公式

如何在海上配对图中使某些标记周围的黑色边框

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

我对这个简单的异步者的例子有什么错误的理解吗?

如何在验证文本列表时使正则表达式无序?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

为什么按下按钮后屏幕的 colored颜色 保持不变?