from collections import Counter from common import parse_foods_file, evaluate_food_entry import string import sys import json journal = json.load(open('journal.json')) foods, recipes = parse_foods_file() if len(sys.argv) > 1: value, name = sys.argv[1:] value = float(value.removesuffix('g')) from pprint import pprint pprint(evaluate_food_entry(foods, recipes, value, name)) exit(0) total_entries = 0 total_words = 0 word_frequency = Counter() total_csv = [['day', 'entries', 'words']] daily_csv = [['day', 'entries', 'words', 'calories', 'carbs', 'fat', 'protein', 'sugar']] entry_csv = [['timestamp', 'words']] words_csv = [['word', 'count']] diet_csv = [[ 'timestamp', 'name', 'grams', 'calories', 'carbs', 'fat', 'protein', 'saturated_fat', 'sugar', 'fiber' ]] for day, obj in journal.items(): daily_entries = len(obj['entries']) daily_words = 0 daily_calories = 0.0 daily_protein = 0.0 daily_carbs = 0.0 daily_fat = 0.0 daily_sugar = 0.0 for entry in obj['entries']: for block in entry['blocks']: if isinstance(block, str): words = ''.join( c if c in string.ascii_letters+"'" else ' ' for c in block.lower() ).split() word_frequency.update(words) entry_words = len(words) daily_words += entry_words elif block['type'] == 'diet': name = block['food'] value = block['amount'] food = evaluate_food_entry(foods, recipes, value, name) diet_csv.append(( entry['timestamp'], name, value, round(food.get('Energy', 0.0), 2), round(food.get('Carbs', 0.0), 2), round(food.get('Fat', 0.0), 2), round(food.get('Protein', 0.0), 2), round(food.get('SaturatedFat', 0.0), 2), round(food.get('Sugar', 0.0), 2), round(food.get('Fiber', 0.0), 2), )) daily_calories += food.get('Energy', 0.0) daily_protein += food.get('Protein', 0.0) daily_fat += food.get('Fat', 0.0) daily_carbs += food.get('Carbs', 0.0) daily_sugar += food.get('Sugar', 0.0) entry_csv.append([entry['timestamp'], entry_words]) daily_macros = daily_protein + daily_fat + daily_carbs daily_csv.append([ day, daily_entries, daily_words, round(daily_calories, 2), round(100 * (daily_carbs / daily_macros) if daily_carbs else 0, 2), round(100 * (daily_fat / daily_macros) if daily_fat else 0, 2), round(100 * (daily_protein / daily_macros) if daily_protein else 0, 2), round(daily_protein, 2), round(daily_sugar, 2) ]) total_entries += daily_entries total_words += daily_words total_csv.append([day, total_entries, total_words]) words_csv += word_frequency.most_common() def write_csv(fname, csv): with open(fname, 'w') as fp: fp.write('\n'.join(','.join(str(x) for x in row) for row in csv)) write_csv('data/total.csv', total_csv) write_csv('data/daily.csv', daily_csv) write_csv('data/entry.csv', entry_csv) write_csv('data/words.csv', words_csv) write_csv('data/diet.csv', diet_csv)