I have a csv file with the following columns:
table geometry field type typeName len precision
and my goal is to create a number of shp files programatically with PyQGIS.
My script stops after creating the first shp file.
Here's my code.
import sys
import re
import csv
from PyQt4.QtCore import *
from PyQt4.QtGui import *
reload(sys)
sys.setdefaultencoding('utf8')
final_list = []
with open(r"D:\Users\Ravi_narayanan\Documents\shpgen.csv", "rU") as s:
reader_tables = csv.DictReader(s,delimiter=';')
liste_tables = list(reader_tables)
l_tables = [i['table'] for i in liste_tables]
l_tables = set(l_tables)
for table in l_tables:
l1 = [line for line in liste_tables if line['table'] == table]
geometry = l1[1]['geometry']
layer_mem = QgsVectorLayer(geometry+"?crs=epsg:2154",table,"memory")
QgsVectorFileWriter.writeAsVectorFormat(layer_mem,r"D:\setupCAPFT2.00\{}.shp".format(table),"utf-8",None,"ESRI Shapefile",False)
layer_path = "D:\{}.shp".format(table)
shp = QgsVectorLayer(layer_path,table,'ogr')
pr = shp.dataProvider()
shp.startEditing()
for field in l1:
if field['type'] != 'Double':
pr.addAttributes([QgsField(field['field'],getattr(QVariant,field['type']),field['typeName'],int(field['len']))])
else:
pr.addAttributes([QgsField(field['field'],getattr(QVariant,field['type']),field['typeName'],int(field['len']),int(field['precision']))])
shp.updateFields()
shp.commitChanges()
shp.stopEditing()
del layer_mem,shp,pr