1 votos

¿Copiar clases de características de la Geodatabase Personal a la Geodatabase de Archivo usando ArcPy?

Tengo una gran cantidad de bases de datos personales que contienen conjuntos de datos y clases de características (un conjunto de datos con cuatro clases de características y una clase de características fuera del conjunto de datos en cada mdb).

Quiero crear una geodatabase de archivo para cada una de las mdb y copiar el conjunto de datos y las clases de características en las geodatabases de archivo.

Para crear un archivo de geodatabase utilizo el siguiente código, pero no sé cómo copiar los conjuntos de datos y las clases de características en el archivo de geodatabase mediante programación.

import arcpy,os
for file in os.listdir(r"X:\test\2"):
    if file.endswith(".mdb"):
        arcpy.CreateFileGDB_management(r"X:\test\2",file[:-4],"CURRENT")

4voto

Aaron Puntos 25882

El siguiente script convierte todos los conjuntos de datos de características y clases de características de una geodatabase personal a una nueva geodatabase de archivos.


import arcpy, os

# Set the in and out workspaces
inws = r'C:\temp'
outws = r'C:\temp\outws'

# List the Access Databases
arcpy.env.workspace = inws
mdbs = arcpy.ListWorkspaces(workspace_type = "Access")

count = 1
for m in mdbs:
    # Define output FGDB name
    fgdb_name = os.path.basename(m).split(".")[0] + ".gdb"

    # Create a new FGDB
    arcpy.CreateFileGDB_management(outws, fgdb_name)

    # Copy any FCs that are directly in personal geodatabase
    arcpy.env.workspace = os.path.join(inws, m)
    fcs = arcpy.ListFeatureClasses()
    for fc in fcs:
        arcpy.CopyFeatures_management(fc, os.path.join(outws, fgdb_name, fc))

    # Report on processing status
    print "%s of %s personal databases converted to FGDB" % (count, len(mdbs))
    count += 1

    # List the feature dataset
    arcpy.env.workspace = os.path.join(inws, m)
    fds = arcpy.ListDatasets()
    for f in fds:
        # Determine FDS spatial reference
        desc = arcpy.Describe(f)
        sr = desc.spatialReference

        # Copy FDS to FGDB
        arcpy.CreateFeatureDataset_management(os.path.join(outws, fgdb_name), f, spatial_reference = sr)

        # Copy the FCs to new FDS
        arcpy.env.workspace = os.path.join(inws, m, f)
        fcs = arcpy.ListFeatureClasses()
        for fc in fcs:
            arcpy.CopyFeatures_management(fc, os.path.join(outws, fgdb_name, f, fc))

3voto

UnkwnTech Puntos 21942

Asumiendo que tu código está funcionando bien para crear geodatabases de archivos con los mismos nombres que tus geodatabases personales, creo que tus próximos pasos deberían ser

  • utilizar ListDatasets para producir una lista de conjuntos de datos de características en su Geodatabase Personal, y luego
  • utilice Crear conjunto de datos de características para crear otros nuevos con los mismos nombres en su Geodatabase de archivos.

1voto

undu Puntos 141

De la respuesta anterior, tienes que reemplazar donde dice:

desc = arcpy.Describe(f)

por esto:

f_path = os.path.join(inws, m, f)
desc = arcpy.Describe(f_path)

De lo contrario, después de copiar el primer conjunto de datos encontrado y de enfrentarse al segundo conjunto de datos de la lista, la función Describir no puede encontrar el conjunto de datos y aparecerá un error.

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