diff --git a/novel_stats/novel_stats.py b/novel_stats/novel_stats.py index 6f66893..0d8395b 100755 --- a/novel_stats/novel_stats.py +++ b/novel_stats/novel_stats.py @@ -4,6 +4,7 @@ import collections import sys import tempfile +import argparse CHAPTER_MARKER = '## ' STATUS_MARKER = '[status]: # ' @@ -25,11 +26,18 @@ def count_words(line): def main(): - arguments = sys.argv[1:] - filename = arguments[0] + # Better argument parsing + parser = argparse.ArgumentParser() + parser.add_argument('-c', '--chapter', action='store_true') + parser.add_argument('-a', '--act', action='store_true') + parser.add_argument('-pp', action='store_true') + parser.add_argument('filename') + arguments = parser.parse_args() + + filename = arguments.filename mdfile = None - if '-pp' in arguments: + if arguments.pp: # -pp flag to allow Markdown Preprocessing primarily to allow multi-file novel formatting # this is implemented using a temporary file created using python's buit-in tempfile library import MarkdownPP @@ -88,7 +96,7 @@ def main(): total_word_count += word_count_by_chapter[chapter_heading] # -c or --chapter to give a chapter-by-chapter word count summary. - if '-c' in arguments or '--chapter' in arguments: + if arguments.chapter: for chapter_heading, chapter_word_count in word_count_by_chapter.items(): if chapter_heading is None: continue @@ -108,15 +116,13 @@ def main(): print() # -a or --act to give an act-by-act word count summary. - if '-a' in arguments or '--act' in arguments: + if arguments.act: for act_heading, act_word_count in word_count_by_act.items(): if act_heading is None: continue print( - 'act {}: {:,} words (~{}%)'.format( - act_heading, act_word_count, act_word_count * 100 // total_word_count - ) + f'act {act_heading}: {act_word_count:,} words (~{act_word_count * 100// total_word_count}%)' ) print()