I am working with QGIS 3.4 and I have written the next code in the Python editor. This aims to create a layer without geometry and save it as CSV file. This works fine but my problem concerns the two last lines: The layer displayed to the layer panel are not permanent despite the CSV file.
from qgis.core import *
from qgis.gui import *
from qgis.PyQt.QtCore import *
root = QgsProject.instance().layerTreeRoot()
# create memory layer
layer = QgsVectorLayer("Point", "tp2", "memory")
pr = layer.dataProvider()
# Enter editing mode
layer.startEditing()
# add fields
pr.addAttributes( [ QgsField("name", QVariant.String),
QgsField("age", QVariant.Int),
QgsField("size", QVariant.Double) ] )
# Commit changes
layer.commitChanges()
# add a feature
feat = QgsFeature(layer.fields())
#feat.setGeometry( QgsGeometry.fromPointXY(QgsPointXY(10,10)))
feat.setAttribute('name', 'john')
feat.setAttribute('age', 10)
feat.setAttribute('size', 180)
pr.addFeatures( [ feat ] )
# Commit changes
layer.commitChanges()
# get absolute file path
projectPath = QDir(QgsProject.instance().absolutePath())
file = QFileInfo(projectPath,"output.csv")
error = QgsVectorFileWriter.writeAsVectorFormat( layer,file.absoluteFilePath(), "utf-8",driverName="CSV")
if error[0] == QgsVectorFileWriter.NoError:
print("success! writing new memory layer")
else:
print("faillure! writing new memory layer,", error)
QgsProject.instance().addMapLayer(layer,False)
root.addChildNode(QgsLayerTreeLayer(layer))
Edit: erratum in the code