Модуль pyshp трохи складний, щоб розвісити, але дуже корисно, як тільки ви його розпочнете. Я написав сценарій, який читає в csv з прикладних даних і записує файл форми з даними, що зберігаються як атрибути правильних типів даних. Типізація даних pyshp / xbase завжди була складною для мене, поки я не знайшов цей посібник користувача щодо формату xbase, і в результаті цього питання я написав у своєму блозі невеличку примітку щодо відповідних типів даних pyshp, частину якої я вставив нижче :
- C - символи ASCII
- N - ціле число подвійної точності, обмежене довжиною близько 18 символів
- D призначений для дат у форматі YYYYMMDD без пробілів або дефісів між розділами.
- F - числа з плаваючою комою з тими ж межами довжини, що і N
- L - для логічних даних, які зберігаються в таблиці атрибутів shapefile як коротке ціле число, як 1 (true) або 0 (false). Значення, які воно може отримати, - 1, 0, y, n, Y, N, T, F або вбудований пітон True та False
Повний перелік наступний:
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)
Я сподіваюся, що це допомагає.