このコードを使用してファイルをダウンロードしようとすると:
import urllib
urllib.urlretrieve("http://e4ftl01.cr.usgs.gov/MOLT/MOD11A1.005/2012.07.11/MOD11A1.A2012193.h22v10.005.2012196013617.hdf","1.hdf")
ファイルが正しくダウンロードされます。
しかし、私の目的は、ファイル名の一部である入力に応じてファイルをダウンロードする関数を構築することです。
Web ページには多くのファイルがあります。ファイル名の一部はすべてのファイルで同じですが (例: "/MOLT/MOD11A1.005/")、これは問題ありません。いくつかの他の部分は、明確に定義されたルール (例: "h22v10") に従ってファイルごとに変更されます。私は %s (例: h%sv%s) を使用してこれを解決したので、これも問題ではありません。問題は、名前の一部が規則なく変更されることです (例: "2012196013617", )。名前のこれらの部分は重要ではないため、これらの部分は無視したいと思います。したがって、名前に最初の 2 つの部分 (変更されない部分と規則に従って変更される部分) とそれ以外を含むファイルをダウンロードしたいと考えています。
何にでもワイルドカードを使用できると思ったので、これを試しました:
import urllib
def download(url,date,h,v):
urllib.urlretrieve("%s/MOLT/MOD11A1.005/%s/MOD11A1.*.h%sv%s.005.*.hdf" %
(url, date1, h, v), "2.hdf")
download("http://e4ftl01.cr.usgs.gov", "2012.07.11", "22", "10")
これは要求されたファイルをダウンロードしませんが、代わりに次のようなエラー ファイルを生成します。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Foun d</h1>
<p>The requested URL /MOLT/MOD11A1.005/2012.07.11/MOD11A1\*\h22v10.005\*\.hdf was not found on this server.</p >
</body>
</html>
ワイルドカードは HTTP では機能しないようです。これを解決する方法はありますか?