Python_scripts/edit_qgis.py
2025-09-18 16:54:02 +02:00

51 lines
2.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from fnmatch import filter
from io import BytesIO
from os import (walk, path, rename)
from zipfile import ZipFile, ZIP_DEFLATED
def main(in_dir, dic_values, backup_suffix=None,encoding='UTF-8'):
for (dirpath, dirnames, filenames) in walk(in_dir):
qgzs = filter(filenames, '*.qgz')
for qgz in qgzs:
qgz_path = path.join(dirpath, qgz)
mem_qgz = BytesIO()
with ZipFile(qgz_path, 'r') as in_qgz, ZipFile(mem_qgz, 'w', compression=ZIP_DEFLATED) as tmp_qgz:
for f in in_qgz.infolist():
data = in_qgz.read(f.filename).decode(encoding,errors='ignore')
if f.filename.endswith('.qgs'):
for old, new in dic_values.items():
data = data.replace(old, new)
# data = [data.replace('{}'.format(old), '{}'.format(new)) for old, new in dic_values.items()][0]
tmp_qgz.writestr(f.filename, data)
if backup_suffix is not None:
backup_suffix = backup_suffix if backup_suffix.startswith('.') else '.' + backup_suffix
try:
rename(qgz_path, qgz_path + backup_suffix)
except FileExistsError as err:
print('Unable to backup file, skipping {} ({})'.format(qgz_path, err))
continue
with open(qgz_path, 'wb') as out_qgz:
out_qgz.write(mem_qgz.getvalue())
if __name__ == '__main__':
backup_suffix = '.orig' # Don't overwrite orig .qgz (just in case...), append ".orig"
in_dir = r'/home/colas/Documents/tmp/MARJORIE'
encodage = 'UTF-8'
dic_values = {
'192.168.0.189': '91.134.194.221',
'authcfg=xoibz7j': 'authcfg=ceniser',
'bd_cen38': 'bd-cen-38',
# 'MS Shell Dlg 2':'Tahoma',
# 'https://datacarto.datara.gouv.fr':' https://datacarto.open-datara.fr',
# 'Dingbats': '',
}
main(in_dir, dic_values, backup_suffix,encoding=encodage)