Respuestas:
En lo que respecta a un sistema de archivos, un archivo gdb es un directorio; intentar copiar uno como un solo archivo no funcionará. Probar esto:
import shutil, errno
def copyanything(src, dst):
try:
shutil.copytree(src, dst)
except OSError as exc: # python >2.5
if exc.errno == errno.ENOTDIR:
shutil.copy(src, dst)
else: raise
copytree
no podrá copiar el contenido de la geodatabase de archivos si hay algún .lock
archivo allí; recibirá un error de permiso denegado. ¡La Copy
herramienta GP copiará la geodatabase incluso si hay bloqueos allí (un usuario ha abierto una ventana de propiedades de clase de entidad o simplemente navega en la geodatabase en la ventana Catálogo)!
Otra opción:
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001700000051000000
import arcgisscripting
gp = arcgisscripting.create()
gp.Copy_management(r"C:\test.gdb", r"C:\test_COPY.gdb")
arcpy.Copy_management(r"inPath", r"outPath")
para el método arcpy (versión 10 en lugar de 9.3)
Hice un script simple para copiar geodatabases en sub-carpetas. Se ejecuta bastante bien. Espero que esto ayude
import sys, arcpy, os
input_folder = "pro_mdb"
output_folder = "file-geodatabase"
curr_file = os.getcwd()
pro_mdb = os.path.join(curr_file,input_folder)
fgeodatabase = os.path.join(curr_file,output_folder)
folders = os.listdir(pro_mdb)
for folder in folders:
arcpy.env.workspace = os.path.join(pro_mdb,folder)
filegdb = arcpy.ListWorkspaces("*","FileGDB")
if len(filegdb) > 0:
filegdb_name = os.path.basename(filegdb[0])
ofgeodatabase = os.path.join(fgeodatabase,filegdb_name)
if not arcpy.Exists(ofgeodatabase):
try:
arcpy.Copy_management(filegdb[0],ofgeodatabase)
print "Da copy xong: %s" %(filegdb[0])
except Exception as e:
print e.message
else:
print "Da ton tai: %s" %(filegdb_name)
else:
print "Khong co FGB cua tinh %s" %(folder)