95 lines
3.9 KiB
Python
95 lines
3.9 KiB
Python
import os
|
|
import re
|
|
import sys
|
|
import yaml
|
|
|
|
def modify_files(config_path):
|
|
"""
|
|
Modifiziert Dateien basierend auf einer YAML-Konfigurationsdatei.
|
|
|
|
:param config_path: Pfad zur Konfigurationsdatei
|
|
"""
|
|
# load config
|
|
with open(config_path, 'r', encoding='utf-8') as config_file:
|
|
config = yaml.safe_load(config_file)
|
|
|
|
files_modified = 0
|
|
|
|
# iterate trough every config
|
|
for entry in config['modifications']:
|
|
search_pattern = entry.get('file_pattern')
|
|
insert_rules = entry.get('insert_rules', [])
|
|
replace_rules = entry.get('replace_rules', [])
|
|
|
|
# recursiv search starting at start dir
|
|
for root, dirs, files in os.walk(config.get('start_directory', '.')):
|
|
for filename in files:
|
|
# check filenamepattern
|
|
if re.search(search_pattern, filename):
|
|
full_path = os.path.join(root, filename)
|
|
|
|
try:
|
|
with open(full_path, 'r', encoding='utf-8') as file:
|
|
content = file.read()
|
|
|
|
modified = False
|
|
modified_content = content
|
|
|
|
# iterate trough insert rules
|
|
for rule in insert_rules:
|
|
insert_text = rule.get('insert_text')
|
|
|
|
# insert after specific text
|
|
if 'after_text' in rule:
|
|
search_text = rule.get('after_text')
|
|
if insert_text not in modified_content:
|
|
modified_content = modified_content.replace(
|
|
search_text,
|
|
f'{search_text}\n{insert_text}'
|
|
)
|
|
modified = True
|
|
|
|
# insert before spicific text
|
|
elif 'before_text' in rule:
|
|
search_text = rule.get('before_text')
|
|
if insert_text not in modified_content:
|
|
modified_content = modified_content.replace(
|
|
search_text,
|
|
f'{insert_text}\n{search_text}'
|
|
)
|
|
modified = True
|
|
|
|
# iterate replace rules
|
|
for rule in replace_rules:
|
|
old_text = rule.get('old_text')
|
|
new_text = rule.get('new_text')
|
|
|
|
# check, if the text to be replaced, exists
|
|
if old_text in modified_content:
|
|
modified_content = modified_content.replace(old_text, new_text)
|
|
modified = True
|
|
|
|
# save changed files
|
|
if modified:
|
|
with open(full_path, 'w', encoding='utf-8') as file:
|
|
file.write(modified_content)
|
|
|
|
files_modified += 1
|
|
print(f'Modified: {full_path}')
|
|
|
|
except Exception as e:
|
|
print(f'Error modifying file {full_path}: {e}')
|
|
|
|
print(f'\nAnzahl modifizierter Dateien: {files_modified}')
|
|
|
|
def main():
|
|
# path of config file as argument
|
|
if len(sys.argv) < 2:
|
|
print("Error: Provide a path to the config.yaml file")
|
|
sys.exit(1)
|
|
|
|
config_path = sys.argv[1]
|
|
modify_files(config_path)
|
|
|
|
if __name__ == '__main__':
|
|
main() |