在Python中:如何在打开文件前验证其是否已正确下载

1 投票
1 回答
4087 浏览
提问于 2025-04-18 07:58

有没有办法在尝试打开文件之前确认这个文件是有效的呢?最简单的方法就是看看这个文件的大小是不是0字节。但我遇到过一些情况,即使文件大小不为0,它们也是损坏的或不完整的(大多数是因为下载中断造成的)。我在想,是否有某种文件头或者其他“常见”的地方,在每个文件的“内部”都有记录这些信息,这样就可以用来验证这个文件是否“完整”,或者说它的数据是否是100%正确的。

稍后编辑:

我正在使用urllib.urlretrieve(url_source, local_destination)来下载文件。下载后,有没有办法验证目标文件的大小和源文件的大小是否相同呢?

1 个回答

2

一个文件是否有效,主要取决于“有效”这个词的具体意思。没有任何规定说一串随机的字节一定是无效的,除非有上下文来说明。问“这个文件有效吗?”而没有任何信息,通常的回答应该是“也许吧,谁知道呢?你能提供更多细节吗?”

举个例子,有一种方法是规定文件的前n个字节必须以某个特定的字节序列开头,这样任何查看这个文件的人都可以简单地检查这前n个字节。

检查文件有效性的方法有很多。

在你的情况下,当你发送一个HTTP请求时,响应中可能(或者应该)包含一个叫做 content-length 的头部信息,里面会告诉你请求内容的大小。你可以把下载的文件大小和响应中提供的大小进行比较。

比如说:

data = urllib.urlretrieve(url, targetPath)
msg = data[1]
print(msg.getheader("content-length"))

撰写回答