【发布时间】:2010-09-05 13:49:04
【问题描述】:
我正在从网络服务器下载整个目录。它工作正常,但我不知道如何在下载之前获取文件大小以比较它是否在服务器上更新。这可以像我从 FTP 服务器下载文件一样完成吗?
import urllib
import re
url = "http://www.someurl.com"
# Download the page locally
f = urllib.urlopen(url)
html = f.read()
f.close()
f = open ("temp.htm", "w")
f.write (html)
f.close()
# List only the .TXT / .ZIP files
fnames = re.findall('^.*<a href="(\w+(?:\.txt|.zip)?)".*$', html, re.MULTILINE)
for fname in fnames:
print fname, "..."
f = urllib.urlopen(url + "/" + fname)
#### Here I want to check the filesize to download or not ####
file = f.read()
f.close()
f = open (fname, "w")
f.write (file)
f.close()
@Jon:感谢您的快速回答。它可以工作,但 Web 服务器上的文件大小略小于下载文件的文件大小。
例子:
Local Size Server Size
2.223.533 2.115.516
664.603 662.121
跟CR/LF转换有关系吗?
【问题讨论】:
-
可能。你能在上面运行 diff 看看有什么不同吗?您还看到二进制 (.zip) 文件中的文件大小差异吗?编辑:这就是像 Etags 这样的东西派上用场的地方。服务器会在发生变化时通知您,因此您无需下载完整文件即可了解。
-
你是对的,我在打开本地文件进行写入时没有使用“wb”。奇迹般有效!谢谢