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?

Z77
fonte

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
user890
fonte
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")
user7172
fonte
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?

Jay Laura
fonte
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)
VietThanh Le
fonte
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.

vadivelan
fonte