Salin file geodatabase menggunakan Python?

8

Saya mencoba menyalin fgdb dari satu jalur ke jalur lain menggunakan Python.

copy(base.gdb,dest)

Dan menerima pesan:

Error Info: 
[Errno 13] Permission denied:

Bagaimana memperbaikinya?

Z77
sumber

Jawaban:

25

Sejauh menyangkut sistem file, file gdb adalah direktori - mencoba menyalinnya sebagai file tunggal tidak akan berfungsi. Coba ini:

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
pengguna890
sumber
Yap. itu dia. copytree berhasil, hanya salin tidak. Tnx :)
Z77
2
Penting untuk dicatat bahwa copytreetidak akan dapat menyalin file geodatabase konten jika ada .lockfile di sana - Anda akan mendapatkan izin ditolak kesalahan. Alat CopyGP akan menyalin geodatabase bahkan jika ada kunci di sana (pengguna telah membuka jendela properti kelas fitur atau hanya menavigasi di geodatabase di jendela Katalog)!
Alex Tereshenkov
12

Pilihan lain:

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000005100000000

import arcgisscripting

gp = arcgisscripting.create()

gp.Copy_management(r"C:\test.gdb", r"C:\test_COPY.gdb")
pengguna7172
sumber
3
arcpy.Copy_management(r"inPath", r"outPath")untuk metode arcpy (versi 10 sebagai lawan dari 9.3)
Roy
Catatan: Bahwa ketika bekerja melalui Jaringan, operasi ini sangat rapuh. Ini bisa, tidak berfungsi, berfungsi tetapi melaporkan 000260 Kesalahan, atau jika keberuntungan Anda bekerja tanpa kesalahan.
Penyerang Tristan
5

Pastikan orang yang menjalankan skrip python memiliki izin untuk membuat folder tambahan di direktori tempat skrip dijalankan.

Apa jenis sistem yang Anda jalankan skrip? Di mana di PATH Anda mencoba menjalankan skrip?

Jay Laura
sumber
1

saya membuat skrip sederhana untuk menyalin folder geodatabases di-sub. Ini berjalan cukup baik. Semoga ini membantu

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
sumber
0

Pls. pertimbangkan ini dalam kode python Anda. (coba tangkap kesalahan ini)

Saat melakukan copy fGDB manual ke folder lain, mohon. pastikan Anda belum membuka fGDB di arcmap. Ini akan melempar file kesalahan "* .lock".

vadivelan
sumber