Este pequeno script exclui todos os recursos pequenos em todas as camadas. Isso funciona bem, mas o tamanho dos arquivos .shp não é reduzido. Por favor me diga o porquê...
canvas = iface.mapCanvas()
expr = QgsExpression("$length<100")
for l in canvas.layers():
l.startEditing()
it = l.getFeatures(QgsFeatureRequest(expr))
for ft in it:
l.deleteFeature(ft.id())
l.commitChanges()
Você deve verificar a versão do QGIS em que está vendo isso.
Eu sei que esse comportamento foi aprimorado na versão 2.14, para que, depois de chamar deleteFeatures, um shapefile seja reembalado para remover as sobras de linhas órfãs.
Você deve testar novamente com a versão 2.14 e verificar se há alguma melhoria.
fonte