2010-02-18 31 views
7

Tôi đang cố tải xuống tệp zip ("tl_2008_01001_edges.zip") từ trang ftp census sử dụng urllib. Tệp zip là gì khi tôi nhận được nó và làm thế nào để lưu nó?Python và urllib

Tôi khá mới đối với Python và không hiểu cách hoạt động của urllib.

Đây là nỗ lực của tôi:

import urllib, sys 

zip_file = urllib.urlretrieve("ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/Autauga_County/", "tl_2008_01001_edges.zip") 

Nếu tôi biết danh sách các thư mục ftp (hoặc các quận trong trường hợp này), tôi có thể chạy qua danh sách ftp site sử dụng chức năng glob?

Cảm ơn.

Trả lời

8

Sử dụng urllib2.urlopen() cho dữ liệu file zip danh sách thư mục.

Để xử lý tệp zip với mô-đun zipfile, bạn có thể ghi chúng vào tệp đĩa sau đó được truyền tới hàm tạo zipfile.ZipFile. Lấy dữ liệu đơn giản bằng cách sử dụng read() trên đối tượng giống như tệp đã trả về bởi urllib2.urlopen().

thư mục Tìm nạp các:

>>> files = urllib2.urlopen('ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/').read().splitlines() 
>>> for l in files[:4]: print l 
... 
drwxrwsr-x 2 0  4009   4096 Nov 26 2008 01001_Autauga_County 
drwxrwsr-x 2 0  4009   4096 Nov 26 2008 01003_Baldwin_County 
drwxrwsr-x 2 0  4009   4096 Nov 26 2008 01005_Barbour_County 
drwxrwsr-x 2 0  4009   4096 Nov 26 2008 01007_Bibb_County 
>>> 

Hoặc, tách cho tên thư mục:

>>> for l in files[:4]: print l.split()[-1] 
... 
01001_Autauga_County 
01003_Baldwin_County 
01005_Barbour_County 
01007_Bibb_County 
+0

Cảm ơn bạn rất nhiều - điều này giải thích chính xác những gì tôi cần làm. Bây giờ tôi đang vui vẻ tải xuống một vài trăm tệp bằng cách sử dụng này. – djq

3

Mỗi the docs, urlretrieve đặt tệp vào đĩa và trả về một bộ tảo (filename, headers). Vì vậy, các tập tin đã được lưu khi urlretrieve trả về.

Bạn có thể mở và đọc tệp ZIP bạn đã truy xuất bằng mô-đun zipfile của thư viện chuẩn. glob không hoạt động bên trong các tệp zip, chỉ trên các thư mục hệ thống tệp thông thường.

+1

Cảm ơn - vì vậy nếu tôi sử dụng urllib.urlretrieve ("ftp://ftp2.census.gov/geo/ tiger/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip "," F: // ") lưu nó vào ổ F của tôi? Về câu hỏi của tôi, tôi không rõ lắm; Tôi đã tự hỏi làm thế nào tôi lặp qua một danh sách các thư mục ftp trên trang web, chứ không phải trong một tập tin zip. – djq

4
import os,urllib2 
out=os.path.join("/tmp","test.zip") 
url="ftp://ftp2.census.gov/geo/tiger/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip" 
page=urllib2.urlopen(url) 
open(out,"wb").write(page.read()) 
+0

Cảm ơn - điều này giải thích cách tôi cần phải đi về việc lưu đối tượng zipfile, rất hữu ích – djq

Các vấn đề liên quan