本文整理汇总了Python中recorder.Recorder.select_all方法的典型用法代码示例。如果您正苦于以下问题:Python Recorder.select_all方法的具体用法?Python Recorder.select_all怎么用?Python Recorder.select_all使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类recorder.Recorder
的用法示例。
在下文中一共展示了Recorder.select_all方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: run
# 需要导入模块: from recorder import Recorder [as 别名]
# 或者: from recorder.Recorder import select_all [as 别名]
def run(self):
"""Specific stuff at tool activating."""
cur_carhab_lyr = CarhabLayerRegistry.instance().getCurrentCarhabLayer()
if not cur_carhab_lyr:
no_carhab_lyr_msg()
return
csv_dir = QFileDialog.getExistingDirectory(None, "Select a folder:", None, QFileDialog.ShowDirsOnly)
if csv_dir:
now = time.strftime("%Y-%m-%d-%H%M%S")
directory = os.path.join(csv_dir, cur_carhab_lyr.getName() + "_" + now)
if not os.path.exists(directory):
os.makedirs(directory)
for tbl_name, desc in Config.DB_STRUCTURE:
file_name = desc.get("std_name")
tbl_fields = desc.get("fields")
if file_name:
if not desc.get("spatial"):
csv_name = file_name if file_name.endswith(".csv") else file_name + ".csv"
csv_path = os.path.join(directory, csv_name)
field_names = [row[1].get("std_name") for row in tbl_fields if row[1].get("std_name")]
db = DbManager(cur_carhab_lyr.dbPath)
r = Recorder(db, tbl_name)
tbl_rows = r.select_all()
csv_rows = []
for tbl_row in tbl_rows:
csv_row = {}
for dbf, value in tbl_row.items():
for field in desc.get("fields"):
if dbf == field[0] and field[1].get("std_name"):
csv_row[encode(field[1].get("std_name"))] = encode(value)
break
csv_rows.append(csv_row)
with open(csv_path, "wb") as csv_file:
writer = csv.DictWriter(csv_file, field_names)
writer.writeheader()
writer.writerows(csv_rows)
else:
for vlyr in cur_carhab_lyr.getQgisLayers():
vlyr_tbl = QgsDataSourceURI(vlyr.dataProvider().dataSourceUri()).table()
if tbl_name == vlyr_tbl:
shp_name = file_name if file_name.endswith(".shp") else file_name + ".shp"
shp_path = os.path.join(directory, shp_name)
QgsVectorFileWriter.writeAsVectorFormat(vlyr, shp_path, "utf-8", None)
shp_lyr = QgsVectorLayer(shp_path, "", "ogr")
shapefile = shp_lyr.dataProvider()
features = shapefile.getFeatures()
attrs_to_del = []
for attr, attr_desc in tbl_fields:
std_attr = attr_desc.get("std_name")
if not std_attr == attr:
if std_attr:
cur_field = shapefile.fields().field(attr)
new_field = QgsField(cur_field)
new_field.setName(std_attr)
shapefile.addAttributes([new_field])
for feat in features:
idx = shapefile.fields().indexFromName(std_attr)
update_map = {feat.id(): {idx: feat[attr]}}
shapefile.changeAttributeValues(update_map)
attrs_to_del.append(shapefile.fields().indexFromName(attr))
shapefile.deleteAttributes(attrs_to_del)
popup("Export effectué")