mac os x的python3中的文件大小与命令行结果不匹配

mac os x的python3中的文件大小与命令行结果不匹配,python,macos,Python,Macos,我正试图通过在python3中使用urllib获得刚刚下载的文件的大小。我尝试使用len(response.read())获取文件大小,得到的值是653856。但是,完成此操作后,我在检查保存的文件大小是否为0后发现(response.read()是否可能使用数据?),因此我放弃了此选项,转而使用os检查大小: if strFecha in dicc or fecha.year < 2010: # Download the file from `url` and save it l

我正试图通过在python3中使用urllib获得刚刚下载的文件的大小。我尝试使用len(response.read())获取文件大小,得到的值是653856。但是,完成此操作后,我在检查保存的文件大小是否为0后发现(response.read()是否可能使用数据?),因此我放弃了此选项,转而使用os检查大小:

if strFecha in dicc or fecha.year < 2010:
    # Download the file from `url` and save it locally under `nomFichero`:
    with urllib.request.urlopen(url) as response, open(nomFichero, 'wb') as outFile:
        # Following one returns 653856
        size1 = len(response.read())
        shutil.copyfileobj(response, outFile)  
        # Following two lines return 524288
        size2 = os.path.getsize(nomFichero)
        size2 = os.stat(nomFichero).st_size
如果dicc或fecha中的strFecha.year<2010年:
#从“url”下载文件,并将其保存在“nomFichero”下的本地位置:
将urllib.request.urlopen(url)作为响应,将open(nomfichor,'wb')作为输出文件:
#下一个返回653856
size1=len(response.read())
shutil.copyfileobj(响应,输出文件)
#以下两行返回524288
size2=os.path.getsize(nomfichor)
size2=os.stat(nomfichor).st\u大小
我对这两个函数都得到了相同的结果(524288),但在命令行上执行“ls-l”之后,我得到了653856,我不知道为什么这个值与从python得到的值不匹配


谁能告诉我哪个值是好的,以及如何使用python3获得它

我怀疑这与块大小和空块有关

如果您有一个2324020byte文件,那么将有两个值,即磁盘大小(由于文件系统允许的最小空间使用量,用于存储该文件的空间有多大)

和实际文件大小或逻辑文件大小(2324020字节)。例如在Windows7上,我有一个2324020字节的文件;它在磁盘上的大小是2326528字节

Python的操作系统命令

os.path.getsize #Returns real size of file in bytes

将返回文件的确切大小(以字节为单位)

大概是这样的:

lSize=os.stat(filename).st_size
bSize=os.statvfs(filename).f_bsize
sizeOnDisk=(lSize/bSize+1)*bSize
将返回磁盘上的大小,但Windows此时不支持

编辑 表示LS不显示磁盘使用大小,而显示逻辑大小,但注意“空块”可能会改变文件大小

ls命令的输出仅显示文件的大小,不显示 不包括文件使用的间接块。有空的街区吗 文件也包含在命令的输出中


值得注意的是,如果您正在寻找逻辑文件大小,Python stat将是理想的。

我怀疑这与块大小和空块有关

如果您有一个2324020byte文件,那么将有两个值,即磁盘大小(由于文件系统允许的最小空间使用量,用于存储该文件的空间有多大)

和实际文件大小或逻辑文件大小(2324020字节)。例如在Windows7上,我有一个2324020字节的文件;它在磁盘上的大小是2326528字节

Python的操作系统命令

os.path.getsize #Returns real size of file in bytes

将返回文件的确切大小(以字节为单位)

大概是这样的:

lSize=os.stat(filename).st_size
bSize=os.statvfs(filename).f_bsize
sizeOnDisk=(lSize/bSize+1)*bSize
将返回磁盘上的大小,但Windows此时不支持

编辑 表示LS不显示磁盘使用大小,而显示逻辑大小,但注意“空块”可能会改变文件大小

ls命令的输出仅显示文件的大小,不显示 不包括文件使用的间接块。有空的街区吗 文件也包含在命令的输出中



值得注意的是,如果您正在寻找逻辑文件大小,Python stat将是理想的。

什么是“ll”?我的意思是“ls-l”,我编辑了这个问题来澄清它。你能发一篇文章吗?当您从python检查大小时,文件是否刷新并关闭?您使用的是什么OS X版本?使用将这些检查移到
之外,然后查看得到的数字。这看起来像是缓冲。“ll”是什么?我的意思是“ls-l”,我编辑了这个问题来澄清它。你能发一篇文章吗?当您从python检查大小时,文件是否刷新并关闭?您使用的是什么OS X版本?使用
将这些检查移到
之外,然后查看得到的数字。这看起来像是缓冲。请解释一下否决票,这样我就可以附加答案了。非常感谢。OS X
ls-l
以字节为单位返回文件大小,文件大小从不以位为单位测量,因此这个答案几乎与问题无关,但并非完全无关。该示例适用于所有文件。例如,我有一个2.21mb(2324020字节)的文件,它占用(2326528字节)。磁盘上的大小大于“实际”文件大小/字节计数。将更新以反映字节作为示例,而不是位。它不适用于所有文件。它适用于以块显示文件大小的程序
ls-
l没有,统计数据也没有。请解释否决票,以便我可以附加答案。非常感谢。OS X
ls-l
以字节为单位返回文件大小,文件大小从不以位为单位测量,因此这个答案几乎与问题无关,但并非完全无关。该示例适用于所有文件。例如,我有一个2.21mb(2324020字节)的文件,它占用(2326528字节)。磁盘上的大小大于“实际”文件大小/字节计数。将更新以反映字节作为示例,而不是位。它不适用于所有文件。它适用于以块显示文件大小的程序<代码>ls-
l不存在,stat也不存在。