X-Git-Url: https://git.armaanb.net/?p=phrases.git;a=blobdiff_plain;f=phrases.py;h=63199d141d996cccc70d160ad3f71438f2909a32;hp=d1d934f2e324d9bf0cabd2b834e22d1103af8f1a;hb=f03d1f1de5ed1c36fe3e27505653e669f01a59a3;hpb=dd53941276d71568bfbff8e135903518a4d14790 diff --git a/phrases.py b/phrases.py index d1d934f..63199d1 100755 --- a/phrases.py +++ b/phrases.py @@ -3,52 +3,84 @@ # Armaan Bhojwani 2020 import argparse +import csv import random import sys -import csv def main(args=sys.argv[1:]): # Argument parsing - parser = argparse.ArgumentParser(description="Latin famous phrases in the terminal.") - parser.add_argument("-e", "--english", action='store_true', help="Print the English translation.") - parser.add_argument("-i", "--id", action='store_true', help="Print the id of the phrase.") - parser.add_argument("-l", "--latin", action='store_true', help="Print the Latin phrase (default)") - parser.add_argument("-m", "--min", default=0, type=int, help="Set the minimum length of the Latin phrase") - parser.add_argument("-M", "--max", default=10000000, type=int, help="Set the maximum length of Latin phrase") - parser.add_argument("-n", "--notes", action='store_true', help="Print any notes on phrase") + parser = argparse.ArgumentParser( + description="Latin famous phrases in the terminal.") + parser.add_argument("-i", "--id", + action='store_true', + help="print the id of the phrase.") + parser.add_argument("-l", "--latin", + action='store_true', + help="print the Latin phrase (default)") + parser.add_argument("-e", "--english", + action='store_true', + help="print the English translation.") + parser.add_argument("-n", "--notes", + action='store_true', + help="print any notes on phrase") + parser.add_argument("-m", "--min", + default=0, + type=int, + help="set the minimum length of the Latin phrase") + parser.add_argument("-M", "--max", + default=10000000, + type=int, + help="set the maximum length of Latin phrase") + parser.add_argument("-p", "--num", + action='store_true', + help="print number of possibilities within constraints") + parser.add_argument("-f", "--file", + default="/usr/share/phrases/phrases.csv", + help="set the location of the phrase file") args = parser.parse_args() right_length = [] - # Find phrases of the right size - with open('/usr/share/phrases/phrases.csv') as f: + # convert csv file into list + with open(args.file) as f: reader = csv.reader(f) - all_lines = list(reader) next(reader, None) # skip header - for row in all_lines: - try: - if args.max >= int(row[4]) >= args.min: # generate a shortlist of phrases of the right length - right_length.append(row[0]) - except: - pass # skip malformed rows - - try: - chosen = int(right_length[random.randint(0, len(right_length) - 1)]) # choose a random id from the shortlist - except: - sys.exit("No phrase within the given parameters!") - - # Output as specified in flags - if not (args.english or args.latin or args.notes): - print(all_lines[chosen][1]) - else: - if args.id: - print(all_lines[chosen][1]) - if args.latin: - print(all_lines[chosen][1]) - if args.english: - print(all_lines[chosen][2]) - if args.notes: - print(all_lines[chosen][3]) + all_lines = list(reader) + f.close() + + # iterate through all the phrases + for row in all_lines: + try: # generate a shortlist of phrases of the right length + if args.max >= int(row[4]) >= args.min: + right_length.append(row[0]) + except: # skip malformed rows without exiting + pass + + try: # choose a random id from the shortlist + chosen = int(right_length[random.randint(0, len(right_length) - 1)]) + except: + sys.exit("No phrase within the given parameters!") + + # Output as specified in flags + for row in all_lines: + if int(row[0]) == chosen: + if not (args.id + or args.latin + or args.english + or args.notes + or args.num): + print(row[1]) + else: + if args.id: + print(row[1]) + if args.latin: + print(row[1]) + if args.english: + print(row[2]) + if args.notes: + print(row[3]) + if args.num: + print(len(right_length)) if __name__ == "__main__": main()