Respostas:
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
copytree
não será possível copiar o conteúdo do geodatabase do arquivo se houver algum .lock
arquivo lá - você receberá um erro de permissão negada. A Copy
ferramenta 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)!
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")
arcpy.Copy_management(r"inPath", r"outPath")
para o método arcpy (versão 10, em vez de 9.3) #
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)