0

このコードを使用してファイルをダウンロードしようとすると:

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 では機能しないようです。これを解決する方法はありますか?

4

2 に答える 2

2

問題は、名前の一部が規則なく変更されることです (例: "2012196013617", )。名前のこれらの部分は問題ではなく、これらの部分を無視したい

それは不可能です。HTTP URL は「ワイルドカード」をサポートしていません。既存の URL を指定する必要があります。

于 2013-09-05T08:32:39.737 に答える