diff --git a/novel_stats/novel_stats.py b/novel_stats/novel_stats.py index b4b19f2..899740d 100755 --- a/novel_stats/novel_stats.py +++ b/novel_stats/novel_stats.py @@ -26,8 +26,8 @@ def count_words(line): def main(): arguments = sys.argv[1:] filename = arguments[0] - chapter_number = None - act_number = None + chapter_heading = None + act_heading = None total_word_count = 0 word_count_by_chapter = collections.defaultdict(int) word_count_by_status = collections.defaultdict(int) @@ -36,44 +36,44 @@ def main(): for line in open(filename).readlines(): if line.startswith(CHAPTER_MARKER): - word_count_by_act[act_number] += word_count_by_chapter[chapter_number] - total_word_count += word_count_by_chapter[chapter_number] - if chapter_number in status_by_chapter: - word_count_by_status[status_by_chapter[chapter_number]] += 1 + word_count_by_act[act_heading] += word_count_by_chapter[chapter_heading] + total_word_count += word_count_by_chapter[chapter_heading] + if chapter_heading in status_by_chapter: + word_count_by_status[status_by_chapter[chapter_heading]] += 1 - chapter_number = int(line[len(CHAPTER_MARKER):]) + chapter_heading = line[len(CHAPTER_MARKER):].strip('()\n') - word_count_by_chapter[chapter_number] = 1 # Start at one, because the chapter number itself counts as a word. + word_count_by_chapter[chapter_heading] = count_words(chapter_heading) # Count the words in chapter heading, because the chapter number and title count as words. elif line.startswith(STATUS_MARKER): - status_by_chapter[chapter_number] = line[len(STATUS_MARKER):].strip('()\n') + status_by_chapter[chapter_heading] = line[len(STATUS_MARKER):].strip('()\n') elif line.startswith(ACT_MARKER): - act_number = int(line[len(ACT_MARKER):].strip('()\n')) - word_count_by_act[act_number] = 1 + act_heading = line[len(ACT_MARKER):].strip('()\n') + word_count_by_act[act_heading] = count_words(act_heading) elif line.startswith(COMMENT_MARKER): pass else: line_word_count = count_words(line) - word_count_by_chapter[chapter_number] += line_word_count + word_count_by_chapter[chapter_heading] += line_word_count - if chapter_number in status_by_chapter: - word_count_by_status[status_by_chapter[chapter_number]] += line_word_count + if chapter_heading in status_by_chapter: + word_count_by_status[status_by_chapter[chapter_heading]] += line_word_count # Do some final accounting after the last chapter. - word_count_by_act[act_number] += word_count_by_chapter[chapter_number] - total_word_count += word_count_by_chapter[chapter_number] - if chapter_number in status_by_chapter: - word_count_by_status[status_by_chapter[chapter_number]] += 1 + word_count_by_act[act_heading] += word_count_by_chapter[chapter_heading] + total_word_count += word_count_by_chapter[chapter_heading] + if chapter_heading in status_by_chapter: + word_count_by_status[status_by_chapter[chapter_heading]] += 1 # Print out word counts. - for chapter_number, chapter_word_count in word_count_by_chapter.items(): - if chapter_number is None: + for chapter_heading, chapter_word_count in word_count_by_chapter.items(): + if chapter_heading is None: continue - chapter_status = status_by_chapter.get(chapter_number) + chapter_status = status_by_chapter.get(chapter_heading) print( 'chapter {}: {:,} words{}'.format( - chapter_number, + chapter_heading, chapter_word_count, ' ({})'.format(chapter_status) if chapter_status else '', ) @@ -81,11 +81,11 @@ def main(): print() - for act_number, act_word_count in word_count_by_act.items(): - if act_number is None: + for act_heading, act_word_count in word_count_by_act.items(): + if act_heading is None: continue - print('act {}: {:,} words (~{}%)'.format(act_number, act_word_count, act_word_count * 100 // total_word_count)) + print('act {}: {:,} words (~{}%)'.format(act_heading, act_word_count, act_word_count * 100 // total_word_count)) for status, status_word_count in word_count_by_status.items(): print('{}: {:,} words (~{}%)'.format(status, status_word_count, status_word_count * 100 // total_word_count))