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?

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

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

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?


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)

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.