কীভাবে জিআইএস তালিকা তৈরি করবেন?


21

আমার অফিসটি তার জিআইএস বিভাগে একটি বড় পরিবর্তন দেখতে পাবে। এই বিভাগটি ১৯৮০ এর দশক থেকে চালু রয়েছে এবং এটির জিআইএস ডেটাগুলির একটি বিশাল সংগ্রহ রয়েছে (যেমন, শেফফিলস, রাস্টার ফাইল, ডেটা ইত্যাদি) তবে কখনও কোনও আবিষ্কারের মাধ্যমে হয়নি। এখন এটা হবে।

জিআইএস ডেটা সম্পর্কিত সমস্ত তথ্য (যেমন, শেফফিল, আরক-ইনফরমেশন কভারেজ, লেয়ার ফাইল, * .এমএক্সডি, জিডিবি, রাস্টার ফাইল, এবং আরও অনেক) পিসি থেকে এক্সেল ফাইলে তোলার কোনও স্বয়ংক্রিয় উপায় আছে কি? তথ্যের মধ্যে তৈরির তারিখ, শেষ বার সম্পাদিত তারিখ, ফোল্ডার বা ধারকটির নাম ইত্যাদি অন্তর্ভুক্ত থাকতে পারে


3
আপনি আর্কজিআইএস এর কোন সংস্করণে আছেন? 10.1 এসপি 1 এ এটি আরও সহজ করে তুলেছে arcpy.da.walk
blah238

1
পাইথনের সাহায্যে কোনও পুরানো সার্ভার আক্রমণ করার আগে ভিজ্যুয়াল ইনভেন্টরি নিয়ে এবং ডিজাইনটি স্কেচ করে শুরু করার জন্য এটি কখনও ব্যাথা দেয় না।
রায়

@ রয়ের প্রতিক্রিয়াতে - আপনি এই
নিখরচায়

আপনি কোনও মেটাডেটা অনুসন্ধান পোর্টালটিও বিবেচনা করতে পারেন, যেমন এসরি-র বিনামূল্যে জিওপোর্টাল সার্ভার
স্টিফেন লিড

উত্তর:


18

এটি arcpy.da.Walkআর্কজিআইএস 10.1 এসপি 1 এ ফাংশনটি ব্যবহার করে আমার পক্ষে কাজ করে :

import arcpy, csv, os

workspace = r"c:\GISData"
output = r"C:\temp\test.csv"

with open(output, 'wb') as csvfile:
    csvwriter = csv.writer(csvfile)
    for dirpath, dirnames, filenames in arcpy.da.Walk(workspace):
        for filename in filenames:
            desc = arcpy.Describe(os.path.join(dirpath, filename))
            csvwriter.writerow([desc.catalogPath, desc.name, desc.dataType])

csvমডিউল এছাড়াও আউটপুট ফাইল লেখার প্রক্রিয়া সহজ করার জন্য ব্যবহার করা হয়। এক্সেল সিএসভি ফাইলগুলি খুলতে পারে যাতে আপনি এগুলিকে স্প্রেডশিট হিসাবে দেখতে পারেন।

arcpy.Describeআউটপুটে অন্তর্ভুক্ত করতে পারে এমন অতিরিক্ত বৈশিষ্ট্যগুলির জন্য ফাংশনটি দেখুন ।

আপনি যদি বিশেষভাবে প্রকৃত মেটাডেটা থেকে তথ্য বিশ্লেষণের সন্ধান করছেন তবে এই উত্তরের স্ক্রিপ্টটি দেখুন: একটি ফাইল জিওডাটাবেজে সমস্ত ফাইলের নাম (এবং সম্ভবত মেটাডেটা) ধারণকারী একটি সারণী তৈরি করা হচ্ছে


@ ব্লহ ২৩৯৯, এক্সেল পাঠ্য ফাইলগুলিও খুলতে পারে, কেবল সীমানা সরবরাহকারীর প্রয়োজন।
আর্টওয়ার্ক

4
সত্য, তবে এক্সেল সিএসভি ডায়ালেক্ট এম্বেডড কোটস, নিউলাইনস এবং কমা হিসাবে সমস্ত জটিল বিষয়গুলির যত্ন নেয়। কেবল ফাইলটি খোলার জন্য এটি উইজার্ডের মধ্য দিয়ে যাওয়ার প্রয়োজন হয় না।
blah238

স্পষ্টতার জন্য THX।
শিল্পকর্ম

10

আপনি যখন পাইথন ব্যবহার করেন, আপনার যা করতে চান তা করতে আপনাকে অবশ্যই সঠিক মডিউলগুলি ব্যবহার করতে হবে। এক্সটেনশন shp সহ একটি ডিরেক্টরিতে সমস্ত ফাইল সন্ধান করার জন্য, উদাহরণস্বরূপ, অনেক সহজ সমাধান রয়েছে যা বিরতি ছাড়াই উপস্থাপিত হয়েছিল, যা ভয়ঙ্কর ... (নাথান ডাব্লু দ্বারা উপস্থাপিত সমাধান হিসাবে, তবে আরও অনেকগুলি রয়েছে, কেবল ইন্টারনেটে অনুসন্ধান করুন)

প্রাসঙ্গিক মডিউলগুলির সাথে কয়েকটি উদাহরণ:

1) গ্লোব মডিউল সহ:

কেবল আকার:

import glob
import os
os.chdir("mydir")
for files in glob.glob("*.shp"):
    print files

আকৃতি এবং জিওডাটাবেস:

import glob
types = ('*.shp', '*.gbd') # the tuple of file types
files_grabbed = []
for files in types:
     files_grabbed.extend(glob.glob(files)) #files_grabbed = the list of shp and gbd files

আপনি যদি সাব-ডিরেক্টরিতেও অনুসন্ধান করতে চান:

import glob
for f in glob.iglob("/mydir/*/*.shp"): #search immediate subdirectories 
    print f

2) os.listdir এবং তালিকা উপলব্ধি (দুটি লাইনে) -> ফলাফলের তালিকা সহ

path = 'mydir'
shape_files = [f for f in os.listdir(path) if f.endswith('.shp')]
gdb_files = [f for f in os.listdir(path) if f.endswith('.gdb')]

3) fnmatch মডিউল সহ:

import fnmatch
for file in os.listdir('path'):
    if fnmatch.fnmatch(file, '*.shp'):
        print file

এবং আরও অনেকগুলি সমাধান, পুনরাবৃত্তি করা ইত্যাদি


'* .shp' পদ্ধতিটি ব্যবহার করে আপনি কীভাবে .shp.xML ফাইল উপেক্ষা করবেন?
আর্টওয়ার্ক

1
তুমি কি চেষ্টা করেছ? glob.glob ("*। shp") আমার শেষে .shp.xML ফাইলগুলি ফেরায় না।
blah238

@ blah238, চেষ্টা করেননি, ধন্যবাদ।
শিল্পকর্ম

5

আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ artwork21 এবং নাথান ডাব্লু। এবং হ্যাঁ নাথেনের কোডটি যাদু করেছে।

import os, arcpy

#create blank text file
with open("C:\\Temp\\GISlayers.txt", "w") as txt:
for root, dirs, files in os.walk("C:\\Temp\\temp"):
    for f in files:
        #look for shapefiles
        if f.endswith('.shp'):
            desc = arcpy.Describe(root + "\\" + f)
            #write info to text file
            txt.write(desc.name + "," + desc.catalogPath + "\n")

        #look for file geodatabases
        if f.endswith('.gdb'):
            desc = arcpy.Describe(root)
            for child in desc.children:
                #write info to text file
                txt.write(child.name + "," + child.path + "\n")

        #look for layer files
        if f.endswith('.lyr'):
            desc = arcpy.Describe(root + "\\" + f)
            #write info to text file
            txt.write(desc.name + "," + desc.catalogPath + "\n")

        #look for img file
        if f.endswith('.img'):
            desc = arcpy.Describe(root + "\\" + f)
            #write info to text file
            txt.write(desc.name + "," + desc.catalogPath + "\n")

কেবলমাত্র ফাইলের নাম এবং অবস্থান। আমি যে পিসির সাথে কাজ করব তাতে প্রচুর কভারেজ (আর্ক-ইনফোরেশন ফাইল) ফাইল রয়েছে, এটি কি তাদের উপরও কাজ করবে?


আমার সফ্টওয়্যারটির সংস্করণ হিসাবে, আমি এজি 10.1 এসপি 1 ব্যবহার করি, তবে অন্যান্য পিসি বেশিরভাগ ক্ষেত্রে ইএসআরআই সফটওয়্যার-আর্কের তথ্যগুলির বিভিন্ন সংস্করণ ব্যবহার করে।
blu_sr

আমি arcpy.da.walkক্রেভ্রেজগুলি তালিকাভুক্ত করব কিনা তা আমি নিশ্চিত নই , তবে এটি অনুমান করব না যেহেতু এটি ডেটা টাইপ বা টাইপ ফিল্টারগুলিতে তালিকাভুক্ত নয়।
blah238

এখানে কোডটির একটি সংক্ষিপ্ত সংস্করণ রয়েছে: gist.github.com/4577289 । Shp, Lyr, এবং img এর যুক্তি যেমন একই, আমরা কেবল একটি ifবিবৃতিতে সেগুলি করি ।
নাথান ডাব্লু

2
আপনি txt.close()যদি ব্যবহার করছেন তবে আপনার এটিরও দরকার নেই withকারণ ব্লকটি প্রস্থান করার সময় এটি আপনার পক্ষে হবে।
নাথান ডাব্লু

4

যদি আপনার কাছে অর্কিজিআইএস ডেস্কটপ 10.0 (বা এর কোনও সার্ভিস প্যাক) থাকে তবে আমার মনে হয় আপনার সেরা বেটটি একটি অজগর স্ক্রিপ্ট লিখছেন যা একটি সংজ্ঞায়িত জিআইএস ডিরেক্টরি দেখতে ও.এসপি, যেমন সাধারণ জিআইএস ফাইল এক্সটেনশনগুলির অনুসন্ধান করতে ওএস.ওয়াক ব্যবহার করে। gdb, .mdb, ইত্যাদি ... এবং একটি কমা বিস্মৃত পাঠ্য ফাইলে ফলাফল লিখে। তারপরে আপনি টেক্সট ফাইলটি এক্সেলে আনতে পারেন, নীচের কোড উদাহরণটি দেখুন:

import os, arcpy

#create blank text file
txt = open("C:\\Temp\\GISlayers.txt", "w")

for root, dirs, files in os.walk("C:\\Temp\\temp"):
    for f in files:

        #look for shapefiles
        foundSHP = f.find(".shp")
        if foundSHP >0:
            checkEXT = f[-3:]
                if checkEXT <> "xml":
                    desc = arcpy.Describe(root + "\\" + f)
                    #write info to text file
                    txt.write(desc.name + "," + desc.catalogPath + "\n")

        #look for file geodatabases
        foundGDB = f.find(".gdb")
        if foundGDB >0:
            desc = arcpy.Describe(root)
            for child in desc.children:
            #write info to text file
            txt.write(child.name + "," + child.path + "\n")
        break
txt.close()

আপনি যদি ডেস্কটপের জন্য আরকিজিআইএস 10.1 (বা তারপরে) ব্যবহার করে থাকেন তবে এখানে আর একটি উত্তর রয়েছে যা আরসিপি.ডি.ওয়ালক ব্যবহার করে যা 10.0 বা তার আগে পাওয়া যায়নি।


আপনি আপনার কোড পরীক্ষা করতে চাইতে পারেন। এটি প্রথমে কোনও আকার পেলে কেবল জিডিবি অনুসন্ধান করবে। মনে হচ্ছে ইন্ডেনশনটি সমস্ত গোলমেলে আছে।
নাথান ডাব্লু

আমি এখানেও f.find সঠিক ব্যবহার না। এটি আরও ভাল এইভাবে লেখা হবে: gist.github.com/4577289 অবশ্যই অনির্ধারিত
নাথান ডাব্লু

ভাবেন না f.find **
নাথান ডাব্লু

অন্যান্য সরলকরণের মধ্যে csvমডিউলটি ফাইলটি লেখার জন্য কিছুটা বিমূর্ত করতে এবং arcpy.da.walk10.1 এসপি 1 ব্যবহার করে জিআআইএস ডাটা টাইপের আর্কজিআইএস হ্যান্ডেলটিকে থাকতে দেয়।
blah238

ধন্যবাদ! আমি সেই বয়সের পুরাতন ডাটাবেস থেকে যতটা সম্ভব তথ্য বের করার কাজ করছি।
blu_sr

0

আপনি যদি প্রোগ্রামিং এড়াতে চান তবে এটি সবচেয়ে সহজ এবং দ্রুত পদ্ধতি হতে পারে।

এএসএপ ইউটিলিটিস নামে এক্সেলের জন্য একটি অ্যাড-অন রয়েছে । একটি 90 দিনের বিনামূল্যে ট্রায়াল রয়েছে তবে এর পরে, এটি ব্যবসায়িক ব্যবহারের জন্য 49 ডলার। এটি শিক্ষার্থী বা ব্যক্তিগত ব্যবহারের জন্য বিনামূল্যে। অ্যাড-অন অনেক দরকারী কার্যকারিতা যুক্ত করে। যার মধ্যে একটি ফোল্ডার কাঠামোতে ফাইলগুলির একটি তালিকা তৈরি করছে । এটি ফাইলের বৈশিষ্ট্যও সরবরাহ করে। আপনি যদি চান তবে ফাইল টাইপ দ্বারা ফলাফল সীমাবদ্ধ করতে পারেন।

এটি কীভাবে করবেন তার একটি ভিডিও এখানে ।

আমি এই অ্যাড-অনটি আগে ব্যবহার করেছি এবং ফলাফলগুলি খুব দ্রুত।

দ্রষ্টব্য, আমি এই সফ্টওয়্যার সংস্থার সাথে অনুমোদিত নই।


1
থানেক্স ফেজার, তবে আমি মনে করি না এটি জিআইএস ফাইলের প্রকারগুলি আগের মতো করে নিয়েছে। .Shp কেবল .shp নয়, এর সাথে আরও অনেকগুলি ফাইল রয়েছে।
blu_sr

এটি কোনও ফোল্ডারে যে কোনও এবং সমস্ত ফাইলের প্রকার পেতে পারে।
Fezter

2
@ ফিটজার যদি না জানে যে ফাইল এবং ব্যক্তিগত জিওডাটাবেসগুলি থেকে জিআইএস ডেটাসেটগুলি কীভাবে পড়তে হয়, তবে আমি আশ্চর্য হব যে এটি এখানে কাজ করবে কারণ প্রতিটি ফাইল এবং প্রতিটি
ডাটাসেটের

হ্যাঁ, আপনি ঠিক বলেছেন। আমি মিস করেছি যে আপনার জিওডাটাবেসস রয়েছে। এটি আপনার পক্ষে কাজ করবে না। এর জন্যে দুঃখিত. তবে, এটি যাইহোক একটি ভাল প্লাগ।
Fezter

0

আমি সম্পূর্ণরূপে কাজ করার অন্যান্য উত্তরগুলি পেতে পারি না।

প্রথম উদাহরণে, জিওডাটাবেসস এবং শেফফিল উভয় সহ একটি ডিরেক্টরিতে, আমি কেবল জিওডাটাবেজে ফিচার ক্লাসগুলির একটি তালিকা পেয়েছি, কিন্তু যখন আমি স্ক্রিপ্টের জিওডাটাবেসগুলি অংশটি মন্তব্য করেছি, তখন আমি শেফফায়ালের একটি তালিকা পেয়েছি।

দ্বিতীয় উদাহরণে, জিওডাটাবেস অংশটি মোটেই কাজ করেনি, তাই আমি প্রথম উদাহরণের জিওডাটাবেস অংশে অনুলিপি করেছি। আবার আমি কেবল জিওডাটাবেসগুলির একটি তালিকা পেয়েছি।

তারপরে এটি আমার কাছে এসেছিল: জিওডাটাবেসগুলি শেফফিলগুলির আগে পড়ে এবং স্ক্রিপ্টটি breakজিওডাটাবেস অংশে থামে ।

অজগর নবাগত হওয়ার কারণে আমি জানি না কেন breakএটির প্রয়োজনীয়তা রয়েছে তবে এটি ব্যতীত স্ক্রিপ্টটি একটি অন্তহীন লুপে চলেছে বলে মনে হয়, তবে যেহেতু এটি breakপ্রয়োজন হয়েছিল তা আমার কাছে ঘটেছিল যে অন্য ফাইলের পরে জিওডাটাবেসগুলি তার নিজের লুপে রেখে দেয় me প্রকারগুলি তালিকাভুক্ত করা হবে, সমস্যার সমাধান করবে:

#create blank text file with open("C:\\Temp\\GISlayers.txt", "w") as txt: for root, dirs, files in os.walk("C:\\Temp\\temp"): for f in files: #look for shapefiles, etc. [code...] for f in files: #look for geodatabases [code...]

আমি যখন এটি করেছি তখন আমার সম্পূর্ণ তালিকা পেয়ে গেল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.