.Csv ফাইলটিকে .shp রূপান্তর করতে pyshp ব্যবহার করছেন?


10

আমি পাইথন স্ক্রিপ্ট হিসাবে একই ফোল্ডারে একটি সিএসভি ফাইল খোলার জন্য পাইথনের সিএসভি মডিউলটি কীভাবে ব্যবহার করতে পারি তা বোঝার চেষ্টা করছি এবং তারপরে শেপফাইল মডিউল পাইশপ ব্যবহার করে একটি আকার ফাইল তৈরি করব।

সিএসভি ফাইলটি দেখতে দেখতে দেখতে বেশ কয়েক হাজার সারি রেকর্ড থাকতে পারে:

id_nr;date;target;start_lat;start_lon
1;2012-05-21;navpoint 25x;55.123654;13.456954
1;2012-05-23;navpoint 11f;55.143654;12.456954

উত্তর:


14

পাইশপ মডিউলটি হ্যাং পেতে কিছুটা জটিল, তবে একবারে এটি কার্যকর হয়ে গেলে। আমি একটি স্ক্রিপ্ট লিখেছি যা উদাহরণের ডেটা সিএসভিতে পড়ে এবং সঠিক ডেটাটাইপগুলির বৈশিষ্ট্য হিসাবে সঞ্চিত ডেটা সহ একটি শেফফিল লিখেছি। Xbase ফর্ম্যাটের জন্য এই ব্যবহারকারীর গাইড না পাওয়া পর্যন্ত পাইশপ / এক্সবেস ডেটিটাইপিং আমার জন্য সবসময়ই জটিল ছিল এবং এই প্রশ্নের ফলস্বরূপ আমি আমার ব্লগে প্রাসঙ্গিক ডেটাটাইপগুলি সম্পর্কিত একটি ছোট নোট লিখেছি, যার একটি অংশ আমি নীচে আটকিয়েছি :

  • সি ASCII অক্ষর
  • এন দৈর্ঘ্যের প্রায় 18 টি অক্ষরের মধ্যে সীমাবদ্ধ একটি ডাবল যথার্থ পূর্ণসংখ্যা
  • ডি ওয়াইওয়াইওয়াইএমএমডিডি ফর্ম্যাটে তারিখগুলির জন্য, বিভাগগুলির মধ্যে কোনও ফাঁকা স্থান বা হাইফেন নেই with
  • এফ সমান দৈর্ঘ্যের এন এর সমান সীমা সহ ভাসমান পয়েন্ট সংখ্যাগুলির জন্য
  • এল লজিক্যাল ডেটার জন্য যা শর্টফিলের অ্যাট্রিবিউট টেবিলটিতে একটি সংক্ষিপ্ত পূর্ণসংখ্যা হিসাবে 1 (সত্য) বা 0 (মিথ্যা) হিসাবে সঞ্চিত থাকে। এটি যে মানগুলি পেতে পারে তা হ'ল 1, 0, y, n, Y, N, T, F বা পাইথন বিল্টইনস সত্য এবং মিথ্যা

সম্পূর্ণ তালিকাটি নিম্নরূপ:

import shapefile as shp
import csv

out_file = 'GPS_Pts.shp'

#Set up blank lists for data
x,y,id_no,date,target=[],[],[],[],[]

#read data from csv file and store in lists
with open('input.csv', 'rb') as csvfile:
    r = csv.reader(csvfile, delimiter=';')
    for i,row in enumerate(r):
        if i > 0: #skip header
            x.append(float(row[3]))
            y.append(float(row[4]))
            id_no.append(row[0])
            date.append(''.join(row[1].split('-')))#formats the date correctly
            target.append(row[2])

#Set up shapefile writer and create empty fields
w = shp.Writer(shp.POINT)
w.autoBalance = 1 #ensures gemoetry and attributes match
w.field('X','F',10,8)
w.field('Y','F',10,8)
w.field('Date','D')
w.field('Target','C',50)
w.field('ID','N')

#loop through the data and write the shapefile
for j,k in enumerate(x):
    w.point(k,y[j]) #write the geometry
    w.record(k,y[j],date[j], target[j], id_no[j]) #write the attributes

#Save shapefile
w.save(out_file)

আশা করি এটা কাজে লাগবে.


খুব সুন্দর স্ক্রিপ্ট। এটি পাঠ্য হিসাবে এটি না পড়ায় আমি একটি ত্রুটি পেয়েছি তাই আমি এই লাইনটি পরিবর্তন করেছি: ওপেন ('ইনপুট সিএসভি', 'আরটি') এর সাথে সিএসভিফাইল:
ওফ্লো

1
আমি মনে করি আপনি if স্টেটমেন্ট ব্যবহার না করে চিরকুটটি শিরোনামের পরিবর্তে হেডারটি এড়িয়ে যাওয়ার জন্য লুপের আগে (r) ব্যবহার করে কর্মক্ষমতা উন্নত করতে পারেন।
rovyko

@ এসগ্রিভ - এই স্ক্রিপ্টটি নির্দিষ্ট প্রাক-নির্ধারিত ক্ষেত্রগুলির সাথে কোনও সিএসভি রূপান্তর করে। আমি একটি জেনেরিক স্ক্রিপ্ট চাই যে কোনও সিএসভি বৈশিষ্ট্য শ্রেণিতে রূপান্তর করতে। সম্ভবত এটি অর্জনের জন্য দরকারী আরকি ফাংশন রয়েছে?
ওয়াটারম্যান

2

বিকল্প হিসাবে আপনার তালিকাগুলিতে ডেটা ধরে রাখার দরকার নেই।

# import libraries
import shapefile, csv

# create a point shapefile
output_shp = shapefile.Writer(shapefile.POINT)
# for every record there must be a corresponding geometry.
output_shp.autoBalance = 1
# create the field names and data type for each.
# you can insert or omit lat-long here
output_shp('Date','D')
output_shp('Target','C',50)
output_shp('ID','N')
# count the features
counter = 1
# access the CSV file
with open('input.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    # skip the header
    next(reader, None)
    #loop through each of the rows and assign the attributes to variables
    for row in reader:
        id= row[0]
        target= row[1]
        date = row[2]
        # create the point geometry
        output_shp.point(float(longitude),float(latitude))
        # add attribute data
        output_shp.record(id, target, date)
        print "Feature " + str(counter) + " added to Shapefile."
        counter = counter + 1
# save the Shapefile
output_shp.save("output.shp")

আপনি এখানে এই প্রয়োগের একটি কার্যকর উদাহরণ খুঁজে পেতে পারেন ।

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