4 votos

La descarga de varios archivos de TIGRE sitio FTP

TIGER FTP Site

Hola a todos! He estado descargando TIGRE de datos por el condado desde el sitio FTP de una en una, con algunos estados que tienen cientos de archivos. Estaba curioso por saber si hay una manera más rápida de descargar tal vez todos los archivos de cada condado para cada estado que a la vez? Gracias por su tiempo y ayuda!

Adjunto una imagen de lo que estoy tratando, gustaría, finalmente, puede descargar todos los archivos para cada estado una vez en frente de una en una.

2voto

Jaearess Puntos 247

Tengo un pequeño script en python que yo improvisaba a partir de varias fuentes. Yo lo uso para descargar todos los archivos de un directorio en un sitio FTP, extraer los archivos y copiarlos a una geodatabase de archivos. Todos los zip y extrae los archivos son eliminados al final de la secuencia de comandos.

Es especialmente útil cuando los archivos en el directorio de cambiar nombres o estás limitado a usar sólo python.

En este ejemplo, los archivos se descargan en un archivo permanente llamado WRKSPCE, y un archivo de texto llamado 'Lands_data_readme.doc' es eliminado.

import arcpy, ftplib, os, socket, sys, zipfile, traceback

HOST = r'ftp.geomaticsyukon.ca'
DRN = r'\CSW\land_tenure\land_tenure\'
WRKSPCE = r'c:\users\athom\documents\GeomaticsYukonFTP'

print 'The current working directory is %s' % os.getcwd()

os.chdir(WRKSPCE)

print 'The workspace has been changed to %s' % WRKSPCE

try:
    f = ftplib.FTP(HOST)
    print "CONNECTED TO HOST '%s'" % HOST
except (socket.error, socket.gaierror) as e:
    print 'Error: cannot reach "%s"' % HOST

try:
    f.login()
except ftplib.error_perm:
    print 'Error: cannot login annonymously'
    f.quit()
print 'Logged in'


try:
    f.cwd(DRN)
except ftplib.error_perm:
    print 'Error: cannot CD to "%s"' %DRN
    f.quit()
print 'Changed to "%s" folder' %DRN

try:
    filenames = f.nlst()
    print filenames

    for ftt in filenames:
        with open(os.path.join(WRKSPCE, ftt), 'wb') as local_file:
            f.retrbinary('RETR '+ ftt, local_file.write)

except ftplib.error_perm:
    print 'Error cannot read file "%s"' % FILE
    os.unlink(FILE)

f.quit()

os.remove (r'c:\users\athom\documents\GeomaticsYukonFTP\Lands_data_readme.doc')

dest_dir = WRKSPCE
try:
    s_file = os.listdir (dest_dir)
    for s_files in s_file:
        with zipfile.ZipFile(s_files) as zf:
            for member in zf.infolist():
                words = member.filename.split('/')
                path = dest_dir
                for word in words[:-1]:
                    drive, word = os.path.splitdrive(word)
                    head, word = os.path.split(word)
                    if word in (os.curdir, os.pardir, ''): continue
                    path = os.path.join(path, word)
                zf.extract(member, path)
        print 'File extracted'

except:
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError INfo:\n    "+\
    str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"
    arcpy.AddError (pymsg)
    msgs = "GP ERRORS: \n" + arcpy.GetMessages(2) + "\n"
    arcpy.AddError(msgs)

try:
    wk = arcpy.env.workspace = r'c:\users\athom\documents\GeomaticsYukonFTP'
    outloc = r'c:\users\athom\documents\arcGIS\UTM_ZONE_7.gdb\LandUse'
    arcpy.env.overwriteOutput = True
    fcs = arcpy.ListFeatureClasses()
    print fcs
    for fc in fcs:
        newfc = fc.replace('.shp', '')
        print newfc
        arcpy.FeatureClassToFeatureClass_conversion(fc, outloc, newfc, '')

except Exception as e:
    print e.message

    arcpy.AddError(e.message)

WRKSPCE = r'c:\users\athom\documents\GeomaticsYukonFTP'

os.chdir(WRKSPCE)

delfile = os.listdir (WRKSPCE)

for delf in delfile:
    os.remove (delf)

1voto

warsze Puntos 178

He hecho lo que usted está tratando con el Tigre de los datos de carreteras, por lo que es lógico que iba a funcionar para lo que estamos haciendo aquí. La negrita valor en este nombre de archivo (el último en su lista arriba)..

tl_2012_04005_edges.zip

..es un llamado de FIPS código. Específicamente, este es el Condado de Coconino, ARIZONA. Así que todo lo que necesitamos es algo que proporciona una buena lista de los códigos FIPS, entonces usted puede escribir un divertido programa para concatenar las URL de cada FIPS código, a continuación, descargar el correspondiente tigre archivo.

En mi caso, tengo el correspondiente Tigre NOS condados shapefile (utilice el mismo año que el resto de los datos para que la FIPS tener el mejor 1-a-1 partido), entonces yo Python y la OGR enlaces para iterar sobre mi shapefile y concat juntos una dirección url para cada condado registro en el archivo de forma, a continuación, descargar de uno en uno (yo más utilizado ogr2ogr llamadas en el mismo automatización para la ingesta de cada descarga en MySQL por lo que todo sucedió en el mismo paso).

Era bastante fresco. Y, probablemente, esto va sin decir, pero usted debe hacer la prueba, frente a sólo un par de características, entonces una vez que usted tiene los kinks trabajado, ejecute el todo de la noche a la mañana.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X