Mô-đun pyshp là một chút khó khăn để hiểu rõ, nhưng thực sự hữu ích một khi bạn thực hiện nó. Tôi đã viết một tập lệnh đọc trong một csv của dữ liệu mẫu và viết ra một shapefile với dữ liệu được lưu trữ dưới dạng các thuộc tính của các kiểu dữ liệu chính xác. Kiểu dữ liệu pyshp / xbase luôn luôn khó khăn đối với tôi cho đến khi tôi tìm thấy hướng dẫn sử dụng này cho định dạng xbase và do câu hỏi này tôi đã viết một ghi chú nhỏ trên blog của mình về các kiểu dữ liệu pyshp có liên quan, một phần mà tôi đã dán bên dưới :
- C là ký tự ASCII
- N là số nguyên có độ chính xác kép giới hạn trong khoảng 18 ký tự
- D dành cho ngày ở định dạng YYYYMMDD, không có khoảng trắng hoặc dấu gạch nối giữa các phần.
- F dành cho các số dấu phẩy động có cùng giới hạn độ dài với N
- L dành cho dữ liệu lôgic được lưu trữ trong bảng thuộc tính của shapefile dưới dạng một số nguyên ngắn là 1 (đúng) hoặc 0 (sai). Các giá trị nó có thể nhận được là 1, 0, y, n, Y, N, T, F hoặc các nội dung python Đúng và Sai
Danh sách đầy đủ như sau:
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)
Tôi hi vọng cái này giúp được.