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)