La secuencia de comandos adjunta de bucles a través de las características de un polígono featureclass y utiliza esa información de atributo para descargar archivos en particular a través de un servidor ftp. El script funciona muy bien para la descarga de archivos mientras todos los archivos en el servidor ftp están contenidos dentro de una carpeta (ejemplo).
Ahora, tengo que descargar las imágenes a través de un servidor ftp con un archivo diferente estructura (ejemplo) donde los archivos están contenidos dentro de varias carpetas. ¿Cómo puedo modificar el código de modo que se producen las siguientes acciones?:
- Uso polígono características para identificar el archivo necesario para descargar (terminado)
- Acceso a la carpeta correcta y descargar las imágenes
Sospecho que necesito para utilizar el sistema operativo.ruta de acceso del módulo, sin embargo, no puedo parecer para poner las piezas juntas.
# Download data via a ftp server
import arcpy, ftplib, os, socket
HOST = 'ftp.agrc.utah.gov'
DIRN = '/Imagery/NAIP2011_4-band/'
#FILE = '' # Defined later in for loop
workspace = r'F:\my\workspace' # This is where the downloads go
quads = r'F:\path\to\polygon\shapefile' # Used to define which files to download
# Get current working directory
print 'The current working directory is %s' % os.getcwd()
# Change the current working directory to a download folder
os.chdir(workspace)
print 'The workspace has been changed to %s' % workspace
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror), e:
print 'ERROR: cannot reach "%s"' % HOST
print '*** Connected to host "%s"' % HOST
try:
f.login()
except ftplib.error_perm:
print 'Error: cannot login anonymously'
f.quit()
print '*** Logged in as "anonymous"'
try:
f.cwd(DIRN)
except ftplib.error_perm:
print 'ERROR: cannot CD to "%s"' % DIRN
f.quit()
print '*** Changed to "%s" folder' % DIRN
# Use search cursor to loop through download polygons,
# get the name of the required file and use that name to download file on ftp site
with arcpy.da.SearchCursor(quads, ("TILE_NAME", "QUADID")) as cursor:
for row in cursor:
print row[0]
FILE = row[0] + ".tif"
name = row[1]
try:
f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write)
arcpy.Rename_management(os.path.join(workspace, FILE), os.path.join(workspace, name + ".tif"))
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' % FILE
os.unlink(FILE)
else:
print '*** Downloaded "%s" to CWD' % FILE
f.quit()