Na stronie ftp znajduje się geobaza plików, którą chciałbym pobrać za pomocą skryptu Python. Obecnie myślę, że jednym ze sposobów jest skopiowanie geobazy ftp do geobazy na moim komputerze. Poniżej znajduje się skrypt, który rozpocząłem. Czy ktoś wie, jak mogę zmienić ten skrypt, aby uzyskać ftp gdb? Dziękuję Ci
Poniżej znajduje się mój końcowy, działający kod oparty na dostarczonej odpowiedzi @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"
python
file-geodatabase
Patty Jula
źródło
źródło
Odpowiedzi:
W takim przypadku nie musisz używać bibliotek Arcpy do kopiowania geobazy. Zamiast tego chcesz skopiować pliki przez połączenie ftp, co możesz zrobić za pomocą
retrbinary
polecenia ftplib .Należy również pamiętać, że system plików traktuje geobazy jako obiekty folderów z zestawem plików w nich zawartych. tzn. nie są pojedynczym plikiem binarnym, który można przenieść za jednym razem za pomocą ftplib.
Tak naprawdę to, co chcesz zrobić, to utworzyć folder lokalny o nazwie
data.gdb
, a następnie na serwerze ftp zapętla wszystkie plikihydro.gdb
i je pobiera. Powinno działać coś takiego (z odrobiną kodu zapożyczonego z odpowiedzi na przepełnienie stosu, ponieważ nie znam zbyt dobrze ftplib):źródło