กำลังคัดลอกไฟล์ฐานข้อมูลภูมิศาสตร์บนไซต์ ftp ไปยังโลคัลดิสก์โดยใช้ Python หรือไม่


11

มีฐานข้อมูลไฟล์อยู่บนไซต์ ftp ที่ฉันต้องการดาวน์โหลดด้วยสคริปต์ Python ตอนนี้ฉันคิดว่าวิธีหนึ่งในการทำเช่นนี้คือการคัดลอกฐานข้อมูล ftp ไปยังฐานข้อมูลทางภูมิศาสตร์บนคอมพิวเตอร์ของฉัน ด้านล่างเป็นสคริปต์ที่ฉันเริ่มต้น ไม่มีใครรู้ว่าฉันสามารถแก้ไขสคริปต์นี้เพื่อให้ได้ ftp gdb ได้หรือไม่ ขอบคุณ


ด้านล่างนี้เป็นรหัสสุดท้ายของฉันที่ทำงานตามคำตอบ @om_hennners ที่มีให้

import arcpy, os, sys
from arcpy import env
arcpy.env.overwriteOutput = True
from ftplib import FTP

directory = "/group/geodb" #location of gdb on ftp
folder = "D:\\temp\\" 
out_gdb = "data.gdb"
out_path = folder + os.sep + out_gdb
copy_gdb = "hydro.gdb" # This is the gdb I would like to copy from the ftp  site
ftp = FTP("10.4.2.22")
ftp.login("user", "pass")

ftp.cwd(os.path.join(directory, copy_gdb))
print "Changed to " + os.path.join(directory, copy_gdb)

filenames = ftp.nlst()
print filenames

print "starting to write"
for f in filenames:
    with open(os.path.join(out_path, f), 'wb') as local_file:
    ftp.retrbinary('RETR '+ f, local_file.write)      


ftp.close()
print "closed ftp connection"

คุณไม่ได้ตั้งค่าสภาพแวดล้อมเวิร์กสเปซที่ใดนอกจากคุณจะมองข้าม วิธีที่ตัวแปร copy_gdb จะใช้เป็นที่ตั้งของมัน
AHigh

4
คุณถือว่าการซิปฐานข้อมูลภูมิศาสตร์ของคุณเป็นไฟล์ ZIP หรือไม่ แทบจะไม่มีเหตุผลใดที่จะมีฐานข้อมูลทางภูมิศาสตร์ที่ไม่มีการบีบอัดในไซต์ FTP
blah238

เป็นไปได้หรือไม่ที่จะตั้งค่าฐานข้อมูลภูมิศาสตร์บนไซต์ ftp เป็นพื้นที่ทำงานโดยไม่จำเป็นต้องดาวน์โหลด?
geogeek

3
@geogeek ไม่ไม่ใช่ ...
blah238

1
@PattyJula ต้องเขียนสคริปต์ ftp วันนี้ เปิดใช้งาน inbuilt ftplib เป็นความเจ็บปวดสำหรับการนำทางการสืบทอดไดเรกทอรี แต่ฉันทำด้วยftputilซึ่งฉันอยากจะแนะนำถ้าคุณจะลองอีกครั้ง
om_henners

คำตอบ:


9

ในกรณีนี้คุณไม่จำเป็นต้องใช้ไลบรารี arcpy เพื่อคัดลอกฐานข้อมูลภูมิศาสตร์ แต่คุณกำลังดูการคัดลอกไฟล์ผ่านการเชื่อมต่อ ftp ซึ่งคุณสามารถทำได้ด้วยretrbinaryคำสั่งftplib

นอกจากนี้โปรดทราบว่าระบบไฟล์ถือว่าฐานข้อมูล Geod เป็นวัตถุโฟลเดอร์ด้วยชุดไฟล์ภายใน เช่นพวกเขาไม่ใช่ไฟล์ไบนารีเดียวที่สามารถถ่ายโอนในหนึ่งครั้งโดยใช้ ftplib

ดังนั้นสิ่งที่คุณต้องการทำจริงๆคือสร้างโฟลเดอร์ในเครื่องที่ชื่อdata.gdbแล้วบนเซิร์ฟเวอร์ ftp จะวนไฟล์ทั้งหมดในhydro.gdbและดาวน์โหลด สิ่งต่อไปนี้ควรใช้งานได้ (ด้วยรหัสเล็กน้อยที่ยืมมาจากคำตอบล้นสแต็กนี้เพราะฉันไม่รู้ ftplib ดีมาก):

import os
import os.path
from ftplib import FTP

directory = "/group/geodb" #location of gdb on ftp
copy_gdb = "hydro.gdb" # This is the gdb I would like to copy from the ftp site

folder = "D:\\temp\\"
out_gdb = "data.gdb"
out_path = os.path.join(folder, out_gdb)

#First, create the out geodatabase as a folder
os.mkdir(out_path)

#FTP logon
ftp = FTP("10.4.2.22")
ftp.login("user", "pass")

#Again, treat the gdb as a folder and navigate there
ftp.cwd(os.path.join(directory, copy_gdb))
print "Changed to " + os.path.join(directory, copy_gdb)

#Now get a list of all files in the folder
filenames = ftp.nlst()
print filenames

#and loop through the filenames to download the files to your local 'gdb'
for f in filenames:
    with open(os.path.join(out_path, f), 'wb') as local_file:
        ftp.retrbinary('RETR '+ filename, local_file.write)

ftp.close()
print "closed ftp connection"

1
ที่ได้ผล ขอบคุณมาก OM_henners! ฉันต้องเปลี่ยนสิ่งเล็ก ๆ น้อย ๆ หนึ่งหรือสองสิ่งด้วยรหัสของคุณฉันจะโพสต์สคริปต์สุดท้ายของฉันในไม่ช้า
Patty Jula
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.