Quotebook to HTML

I am a voracious hoarder of quotations. As I read, I tend to jot them down in my Field Notes notebook and then (usually) type them into Quotebook. It's a well designed and convenient app for collecting such things.

But sometimes I don't want to view my quotes individually. I may want to, say, see every quote by a specific author at once. Quotebook doesn't have a UI for this, but it does let you export all of your quotes into a friendly csv formatted file1. So I wrote a Python script to take that file and turn it into HTML, grouping the quotes alphabetically by author2:

import csv

quotes = []

with open('Quotes.csv', 'rb') as csvfile:
    quotes_file = csv.reader(csvfile)
    for row in quotes_file:
        quotes.append(row)

authors = set([a[1] for a in quotes if a[1] != ' '])
authors = list(authors)
authors.sort()

grouped_quotes = {a:[] for a in authors}

for author in authors:
    for quote in quotes:
        if quote[1] == author:
            grouped_quotes[author].append((quote[0], quote[2]))

out = """<html>
        <head>
            <title>Quotes</title>
        </head>
        <body>
    """

for author in authors:
    out += "<h2>%s</h2>" % author
    for quote in grouped_quotes[author]:
        out += """
                <p>
                    %s
                    <br>
                    <em>%s</em>
                </p>
            """ % quote

out += """
        </body>
    </html>"""

with open('quotes.html', 'w') as outfile:
    outfile.write(out)

Is there a better, more Pythonic way of doing it? I guarantee it. But I need to maintain my reputation as a total hack....


  1. Unfortunately, Quotebook only gives you two export options: email or iTunes sharing. So right now getting the data file somewhere useful is a bit of a manual process. Maybe one day they'll add a Dropbox export option and then you could hook the script up to Hazel.  ↩

  2. Unattributed quotes are not included, but you can change that by editing the list comprehension in line 10 to authors = set([a[1] for a in quotes]) if you like. ↩

Share on App.net

Comments !

++useful

elsewhere