سؤال

أحاول تنزيل ملف مضغوط ("TL_2008_01001_edges.zip") من FTP التعداد الموقع باستخدام urllib. ما هو شكل ملف zip عندما أحصل عليه وكيف يمكنني حفظه؟

أنا جديد إلى حد ما على Python ولا أفهم كيف يعمل Urllib.

هذه محاولتي:

import urllib, sys

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

إذا كنت أعرف قائمة مجلدات FTP (أو المقاطعات في هذه الحالة) ، فهل يمكنني الركض عبر FTP موقع قائمة باستخدام وظيفة العالم؟

شكرًا.

هل كانت مفيدة؟

المحلول

يستخدم urllib2.urlopen() لبيانات ملف zip و سرد الدليل.

لمعالجة ملفات zip مع 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

نصائح أخرى

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

لكل المستندات, urlretrieve يضع الملف على القرص ويعيد توبلي (filename, headers). لذلك تم حفظ الملف بالفعل عندما urlretrieve عائدات.

يمكنك فتح وقراءة ملف zip الذي استردته باستخدام ملف مضغوط وحدة المكتبة القياسية. glob لا يعمل داخل zipfiles ، فقط على أدلة نظام الملفات العادية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top