Add file pattern and recursive directory processing fix_xml_indentations.py

master
Andrey Lihatskiy 2025-04-01 19:42:21 +03:00
parent 497c309a5b
commit 945b965fc2
1 changed files with 43 additions and 11 deletions

View File

@ -86,21 +86,37 @@ def save_xml(tree, file_path, xml_decl, indent_text=False, indent_tab=False, rm_
except IOError as e:
print(f"Error saving file {file_path}: {e}")
def process_directory(directory_path, indent_text=False, indent_tab=False, rm_space=False, rewrite_decl=False):
def process_xml_files(file_paths, indent_text=False, indent_tab=False, rm_space=False, rewrite_decl=False):
found_files = False
if file_paths:
found_files = True
for file_path in file_paths:
xml_decl = get_xml_declaration(file_path)
tree = parse_xml_file(file_path)
if tree is not None:
save_xml(tree, file_path, xml_decl, indent_text, indent_tab, rm_space, rewrite_decl)
return found_files
def process_directory(directory_path, indent_text=False, indent_tab=False, rm_space=False, rewrite_decl=False, file_pattern=None, recursive=False):
if not os.path.isdir(directory_path):
print(f"Directory not found: {directory_path}")
return
xml_files = glob.glob(os.path.join(directory_path, "*.xml"))
if not xml_files:
print(f"No XML files found in directory: {directory_path}")
return
pattern = file_pattern if file_pattern else "*.xml"
found_files = False
for file_path in xml_files:
xml_decl = get_xml_declaration(file_path)
tree = parse_xml_file(file_path)
if tree is not None:
save_xml(tree, file_path, xml_decl, indent_text, indent_tab, rm_space, rewrite_decl)
if not recursive:
# Non-recursive mode
xml_files = glob.glob(os.path.join(directory_path, pattern))
found_files = process_xml_files(xml_files, indent_text, indent_tab, rm_space, rewrite_decl)
else:
# Recursive mode
for root, dirs, files in os.walk(directory_path):
xml_files = glob.glob(os.path.join(root, pattern))
found_files = process_xml_files(xml_files, indent_text, indent_tab, rm_space, rewrite_decl)
if not found_files:
print(f"No XML files found in {'directory tree' if recursive else 'directory'}: {directory_path}")
if __name__ == "__main__":
if len(sys.argv) < 2 or '--help' in sys.argv:
@ -112,9 +128,13 @@ if __name__ == "__main__":
print(" --indent-tab Uses tabs instead of spaces for indentation.")
print(" --rm-space Removes spaces in self-closing tags.")
print(" --rewrite_decl Replaces the XML declaration line.")
print(" --file <pattern> Only process files matching the pattern")
print(" --recursive Process files in all subdirectories")
print("\nCommon Usage:")
print(" To format XML files with text indentation, tab indentation, and removal of spaces in self-closing tags:")
print(" python fix_xml_indentations.py /path/to/xmls --indent-text --indent-tab --rm-space")
print("\n To format specific XML files recursively through all subdirectories:")
print(" python fix_xml_indentations.py /path/to/xmls --file floater_*.xml --recursive")
sys.exit(1)
directory_path = sys.argv[1]
@ -122,4 +142,16 @@ if __name__ == "__main__":
indent_tab = '--indent-tab' in sys.argv
rm_space = '--rm-space' in sys.argv
rewrite_decl = '--rewrite_decl' in sys.argv
process_directory(directory_path, indent_text, indent_tab, rm_space, rewrite_decl)
recursive = '--recursive' in sys.argv
# Get file pattern if specified
file_pattern = None
if '--file' in sys.argv:
try:
file_index = sys.argv.index('--file') + 1
if file_index < len(sys.argv):
file_pattern = sys.argv[file_index]
except ValueError:
pass
process_directory(directory_path, indent_text, indent_tab, rm_space, rewrite_decl, file_pattern, recursive)