Copiar geodatabase de arquivo usando Python?


8

Estou tentando copiar o fgdb de um caminho para outro usando o Python.

copy(base.gdb,dest)

E recebi a mensagem:

Error Info: 
[Errno 13] Permission denied:

Como corrigi-lo?

Respostas:


25

No que diz respeito a um sistema de arquivos, um arquivo gdb é um diretório - tentar copiar um como um único arquivo não funcionará. Experimente o seguinte:

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

Yeap. é isso aí. copytree funciona, apenas copiar não. Tnx :)
— Z77

2
Importante observar que copytreenão será possível copiar o conteúdo do geodatabase do arquivo se houver algum .lockarquivo lá - você receberá um erro de permissão negada. A Copyferramenta GP copiará o banco de dados geográfico, mesmo que haja bloqueios (o usuário abriu uma janela de propriedades da classe de recurso ou simplesmente navegou no banco de dados geográfico na janela Catálogo)!
— Alex Tereshenkov 25/05

12

Outra opção:

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")

3
arcpy.Copy_management(r"inPath", r"outPath")para o método arcpy (versão 10, em vez de 9.3) #
— Roy Roy

Nota: Ao trabalhar em uma rede, essa operação é muito duvidosa. Ele funcionará, mas não funcionará, mas reportará um erro 000260 ou se sua sorte funcionar sem erros.
— Tristan Forward

5

Verifique se a pessoa que está executando o script python tem permissão para criar pastas adicionais no diretório em que o script é executado.

Em que tipo de sistema você está executando o script? Onde no PATH você está tentando executar o script?


1

Eu criei um script simples para copiar geodatabases em sub-pastas. Ele roda muito bem. Espero que isto ajude

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)

0

Pls. considere isso no seu código python. (tente capturar este erro)

Ao fazer a cópia manual do fGDB para outra pasta, pls. verifique se você não abriu o fGDB no arcmap. Ele lançará um arquivo "* .lock" de erro.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.