Copiar geodatabase de archivos usando Python?

8

Estoy tratando de copiar fgdb de una ruta a otra usando Python.

copy(base.gdb,dest)

Y recibí el mensaje:

Error Info: 
[Errno 13] Permission denied:

¿Como arreglarlo?

Z77
fuente

Respuestas:

25

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
usuario890
fuente
Yeap Eso es. copytree funciona, solo copiar no. Tnx :)
Z77
2
Es importante tener en cuenta que copytreeno podrá copiar el contenido de la geodatabase de archivos si hay algún .lockarchivo allí; recibirá un error de permiso denegado. ¡La Copyherramienta 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)!
Alex Tereshenkov
12

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")
usuario7172
fuente
3
arcpy.Copy_management(r"inPath", r"outPath")para el método arcpy (versión 10 en lugar de 9.3)
Roy
Nota: que cuando se trabaja en una red, esta operación es muy dudosa. Funcionará, no funcionará, pero informará un error 000260, o si su suerte funciona sin errores.
Tristan Forward
5

Asegúrese de que la persona que ejecuta el script python tenga permiso para crear carpetas adicionales en el directorio desde el que se ejecuta el script.

¿En qué tipo de sistema está ejecutando el script? ¿En qué parte de la RUTA está tratando de ejecutar el script?

Jay Laura
fuente
1

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)
VietThanh Le
fuente
0

Por favor considere esto en su código de Python. (intenta capturar este error)

Mientras hace una copia manual de fGDB a otra carpeta, por favor. asegúrese de no haber abierto el fGDB en arcmap. Lanzará un archivo de error "* .lock".

vadivelan
fuente