diff --git a/wizard-work/spark/text_stats.py b/wizard-work/spark/text_stats.py index 35a0668..1f7f846 100644 --- a/wizard-work/spark/text_stats.py +++ b/wizard-work/spark/text_stats.py @@ -1,34 +1,38 @@ #!/usr/bin/env python3 """ -text_stats.py - Quick utility to count lines, words, and characters in text files. -Usage: python text_stats.py [file2] ... +text_stats.py - Quick utility to count lines, words, and characters in a file. + +Usage: python3 text_stats.py +Output: JSON with {path, lines, words, chars} """ + import sys +import json +from pathlib import Path -def analyze_text(filepath): - """Return (lines, words, chars) for a text file.""" - try: - with open(filepath, 'r', encoding='utf-8', errors='replace') as f: - content = f.read() - lines = content.count('\n') + (1 if content and not content.endswith('\n') else 0) - lines = len(content.splitlines()) if content.strip() else 0 - words = len(content.split()) - chars = len(content) - return lines, words, chars - except Exception as e: - return None, None, None -def main(): - if len(sys.argv) < 2: - print("Usage: python text_stats.py [file2] ...") +def text_stats(path: str) -> dict: + """Return dict with lines, words, and chars count for given file.""" + p = Path(path) + if not p.is_file(): + raise FileNotFoundError(f"No such file: {path}") + + content = p.read_text() + lines = len(content.splitlines()) if content.strip() else 0 + words = len(content.split()) + chars = len(content) + + return {"path": str(p.resolve()), "lines": lines, "words": words, "chars": chars} + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print(json.dumps({"error": "Usage: text_stats.py "})) sys.exit(1) - for filepath in sys.argv[1:]: - lines, words, chars = analyze_text(filepath) - if lines is None: - print(f"{filepath}: error reading file") - continue - print(f"{filepath}: {lines} lines, {words} words, {chars} chars") - -if __name__ == '__main__': - main() \ No newline at end of file + try: + result = text_stats(sys.argv[1]) + print(json.dumps(result, indent=2)) + except Exception as e: + print(json.dumps({"error": str(e)})) + sys.exit(1) \ No newline at end of file