2010-02-18 7 views
7

मैं urlib का उपयोग कर एक ftp census साइट से एक ज़िप फ़ाइल ("tl_2008_01001_edges.zip") डाउनलोड करने का प्रयास कर रहा हूं। जब मैं इसे प्राप्त करता हूं तो ज़िप फ़ाइल किस रूप में होती है और मैं इसे कैसे सहेजूं?पायथन और urllib

मैं पाइथन के लिए बिल्कुल नया हूं और समझ नहीं पा रहा हूं कि urllib कैसे काम करता है।

यह मेरा प्रयास है:

import urllib, sys 

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

मैं (इस मामले में या काउंटियों) एफ़टीपी फ़ोल्डर की सूची पता है, मैं ग्लोब समारोह का उपयोग कर एफ़टीपी site सूची के माध्यम से दिखाया जा सकता है?

धन्यवाद।

उत्तर

8

ज़िप फ़ाइल डेटा और निर्देशिका लिस्टिंग के लिए उपयोग urllib2.urlopen()

zipfile मॉड्यूल के साथ ज़िप फ़ाइलों को संसाधित करने के लिए, आप उन्हें एक डिस्क फ़ाइल में लिख सकते हैं जिसे zipfile.ZipFile कन्स्ट्रक्टर में पास किया जाता है। डेटा पुनर्प्राप्त करना read() का उपयोग करके फ़ाइल की तरह ऑब्जेक्ट urllib2.urlopen() पर सीधे किया गया है।

लाई जा रही है निर्देशिकाओं:

>>> 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 
>>> 

या, निर्देशिका नाम के लिए बंटवारे:

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

आपको बहुत धन्यवाद - यह बताता है कि मुझे क्या करना है। अब मैं खुशी से कुछ सौ फाइलें डाउनलोड कर रहा हूं। – djq

3

प्रति the docs, urlretrieve फ़ाइल को डिस्क पर रखता है और एक tuple (filename, headers) देता है। इसलिए urlretrieve रिटर्न होने पर फ़ाइल पहले ही सहेजी जा चुकी है।

आप मानक पुस्तकालय के zipfile मॉड्यूल के साथ पुनर्प्राप्त ज़िप फ़ाइल को खोल और पढ़ सकते हैं। glob केवल ज़िप फाइलों के अंदर काम नहीं करता है, केवल सामान्य फाइल सिस्टम निर्देशिकाओं पर।

+1

धन्यवाद - यदि ऐसा है तो मैं urllib.urlretrieve का उपयोग करें ("ftp://ftp2.census.gov/geo/ बाघ/TIGER2008/01_ALABAMA/01001_Autauga_County/tl_2008_01001_edges.zip "," एफ: // ") जो इसे मेरे एफ-ड्राइव में सहेजता है? मेरे ग्लोब सवाल के बारे में, मैं बहुत स्पष्ट नहीं था; मैं सोच रहा था कि मैं एक ज़िप फ़ाइल की बजाय साइट पर ftp फ़ोल्डर्स की सूची के माध्यम से कैसे लूप करता हूं। – 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

धन्यवाद - यह बताता है कि मुझे ज़िपफाइल ऑब्जेक्ट को सहेजने के बारे में कैसे जाना है, जो बहुत उपयोगी है – djq