Sao chép tập tin geodatabase bằng Python?


8

Tôi đang cố gắng sao chép fgdb từ đường này sang đường khác bằng Python.

copy(base.gdb,dest)

Và nhận được tin nhắn:

Error Info: 
[Errno 13] Permission denied:

Làm thế nào để khắc phục nó?

Câu trả lời:


25

Đối với một hệ thống tệp có liên quan, một tệp gdb là một thư mục - cố gắng sao chép một tệp dưới dạng một tệp sẽ không hoạt động. Thử thứ này đi:

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. đó là nó. copytree hoạt động, chỉ cần sao chép không. Tnx :)
Z77

2
Điều quan trọng cần lưu ý là copytreesẽ không thể sao chép nội dung cơ sở dữ liệu địa lý nếu có bất kỳ .locktệp nào ở đó - bạn sẽ nhận được lỗi từ chối cấp phép. Công Copycụ GP sẽ sao chép cơ sở dữ liệu địa lý ngay cả khi có khóa ở đó (người dùng đã mở cửa sổ thuộc tính lớp tính năng hoặc chỉ điều hướng trong cơ sở dữ liệu địa lý trong cửa sổ Danh mục)!
Alex Tereshenkov

12

Một lựa chọn khác:

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")cho phương pháp arcpy (phiên bản 10 trái ngược với 9.3)
Roy

Lưu ý: Rằng khi làm việc trên Mạng, thao tác này rất iffy. Nó sẽ không hoạt động, hoạt động nhưng báo lỗi 000260 hoặc nếu công việc may mắn của bạn không có lỗi.
Tristan Chuyển tiếp

5

Đảm bảo rằng người đang chạy tập lệnh python có quyền tạo các thư mục bổ sung trong thư mục mà tập lệnh được chạy từ đó.

Loại hệ thống nào bạn đang chạy tập lệnh trên? Bạn đang cố gắng chạy tập lệnh từ đâu?


1

tôi đã tạo một tập lệnh đơn giản để sao chép cơ sở dữ liệu địa lý trong các thư mục phụ. Nó chạy khá tốt. Hi vọng điêu nay co ich

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

Xin vui lòng. xem xét điều này trong mã python của bạn. (cố gắng nắm bắt lỗi này)

Trong khi thực hiện sao chép thủ công fGDB sang thư mục khác, xin vui lòng. đảm bảo bạn chưa mở fGDB trong arcmap. Nó sẽ ném một tập tin "* .lock".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.