Created
January 20, 2021 10:40
-
-
Save jdlom/b49afdd692ca34b70773b747c3a606c9 to your computer and use it in GitHub Desktop.
Gist created by PyQGIS Console
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #pyqgis script to retrieve metadata of layer in directory | |
| #https://gist.github.com/42a6b3ab8e1069e3e0523ca90c361aaa | |
| import os | |
| import csv | |
| FOLDER = '/home/jd' | |
| RESULT = '/home/jd/metadata.csv' | |
| def scan_directory(directory, extension=('.tab', '.shp', '.gpkg')): | |
| """return the list of files that matche the extension | |
| Args: | |
| directory (str): the folder to scan | |
| extension (tuple, optional): the extension. Defaults to ('.tab', '.shp', '.gpkg'). | |
| """ | |
| extension = tuple(map(str.lower, extension)) | |
| for root, dirs, files in os.walk(directory, topdown=False): | |
| for filename in files: | |
| if filename.lower().endswith(extension): | |
| yield(root, filename, os.path.join(root, filename)) | |
| def get_metadata(layer): | |
| """Return metadata | |
| Args: | |
| layer ([ogr vectorlayer]): [Not sublayer] | |
| Returns: | |
| metadata: (name, comment, encoding....) | |
| """ | |
| name = layer.name() | |
| comment = layer.dataComment() | |
| encoding = layer.dataProvider().encoding() | |
| datasource = layer.publicSource() | |
| feature_count = layer.featureCount() | |
| geom_type = geom_wkbtype = crs =extent = None | |
| if layer.isSpatial(): | |
| geom_type = layer.geometryType() | |
| if geom_type <0 or geom_type > QgsWkbTypes.NullGeometry: | |
| print(f'{layer} invalid geometry type') | |
| else: | |
| geom_wkbtype = QgsWkbTypes.displayString(layer.wkbType()) | |
| geom_type = QgsWkbTypes.geometryDisplayString(geom_type) | |
| if layer.crs().isValid(): | |
| crs = layer.crs().userFriendlyIdentifier( | |
| QgsCoordinateReferenceSystem.FullString ) | |
| extent=layer.extent().toString() | |
| return (name, comment, encoding, geom_type, | |
| geom_wkbtype, crs, extent, feature_count, datasource) | |
| with open(RESULT, 'w', newline='') as myfile: | |
| wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) | |
| wr.writerow(['name', 'comment', 'encoding', | |
| 'geom_type', 'geom_wkbtype', 'crs', 'extent', 'feature_count','datasource']) | |
| for root, filename, path in scan_directory(FOLDER): | |
| layer = QgsVectorLayer(path, filename,'ogr') | |
| if not layer.isValid(): | |
| print(f'{layer.name()} is not valid') | |
| continue | |
| wr.writerow(get_metadata(layer)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment