পাইথন ব্যবহার করে স্থানীয় ডিস্কে এফটিপি সাইটে ফাইল জিওডাটাবেস অনুলিপি করছেন?


11

একটি এফটিপি সাইটে বসে একটি ফাইল জিওডাটাবেস রয়েছে যা আমি পাইথন স্ক্রিপ্টের সাথে ডাউনলোড করতে চাই। এই মুহূর্তে আমি এটি করার একটি উপায় ভাবছি তা হল আমার কম্পিউটারের জিওডাটাবেজে এফটিপি জিওডাটাবেস অনুলিপি করা। স্ক্রিপ্ট নীচে আমি শুরু করেছি। কেউ কি জানেন যে আমি কীভাবে এই স্ক্রিপ্টটি পরিবর্তন করতে পারি যাতে আমি ftp gdb পাই? ধন্যবাদ


নীচে আমার চূড়ান্ত, কার্য সম্পাদনের কোডটি দেওয়া হয়েছে @ ওপরে_ভক্তদের দেওয়া উত্তরটির ভিত্তিতে।

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 ভেরিয়েবল এটির অবস্থান হিসাবে এটি ব্যবহার করতে চলেছে।
এএইচইইচ

4
আপনি কি জিপ ফাইলটিতে জিওডাটাবেস জিপ করা বিবেচনা করেছেন? কোনও এফটিপি সাইটে একটি সঙ্কুচিত জিওডাটাবেস থাকার প্রায় কোনও কারণ নেই।
blah238

এফটিপিপি সাইটে কোনও জিওডাটাবেস ওয়ার্কস্পেস হিসাবে ডাউনলোড করা প্রয়োজন ছাড়া সেট করা সম্ভব?
জিওজেক

3
@ জিওজিেক না, এটি নয় ...
blah238

1
@ পট্টি জুলাকে আজ একটি এফটিপি স্ক্রিপ্ট লিখতে হয়েছিল। ইনবিল্ট ftplib দেখা যাচ্ছে ডিরেক্টরি উত্তরাধিকার সূচী নেভিগেট করার জন্য একটি ব্যথা। পরিবর্তে আমি এটি ftputil দিয়ে করেছি , যা আমি আপনাকে আবারও চেষ্টা করে দেখতে চাইতাম recommend
ওমেনার্স

উত্তর:


9

এই ক্ষেত্রে জিওডাটাবেস অনুলিপি করার জন্য আপনাকে আরকি লাইব্রেরিগুলি ব্যবহার করার দরকার নেই। পরিবর্তে আপনি এফটিপিপি সংযোগ জুড়ে ফাইলগুলি অনুলিপি করে দেখছেন, যা আপনি ftplib retrbinaryকমান্ড দিয়ে করতে পারেন ।

এছাড়াও নোট করুন যে ফাইল সিস্টেমটি জিওডাটাবেসগুলিকে ফোল্ডার অবজেক্টগুলির মধ্যে ফাইলগুলির একটি সেট সহ বিবেচনা করে। অর্থাৎ এগুলি কোনও একক বাইনারি ফাইল নয় যা ftplib ব্যবহার করে একটি হিটতে স্থানান্তরিত হতে পারে।

সুতরাং সত্যিই আপনি যা করতে চান তা হল একটি স্থানীয় ফোল্ডার তৈরি করা data.gdbএবং এটি এফটিপি সার্ভারে সমস্ত ফাইলের মধ্য দিয়ে লুপ করে 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
কাজ করেছে। আপনাকে অনেক ধন্যবাদ_সামান্য! আমাকে আপনার কোড দিয়ে একটি বা দুটি ছোটখাট জিনিস বদলাতে হবে, আমি শীঘ্রই আমার চূড়ান্ত স্ক্রিপ্ট পোস্ট করব।
প্যাটি জুল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.