Jacob Kaplan-Moss

Tag: Google Spreadsheets

TIL: A DictWriter interface for Google Spreadsheets

I’ve been using Python’s csv library approximately forever so its interfaces – particularly the DictReader and DictWriter interfaces – are almost literally muscle memory at this point. So when I needed to push a bunch of data to Google Sheets, I naturally wanted an interface that worked like DictWriter.

Here’s the code:

class WorksheetDictWriter:
    """
    Something like a `csv.DictWriter`, except for a `gspread.Worksheet`
    """

    def __init__(self, worksheet: gspread.Worksheet, fieldnames: list[str], column="A"):
        self.fieldnames = fieldnames
        self.worksheet = worksheet
        self.column = column
        self.current_row = 1

    def writeheader(self):
        self.writerow(dict(zip(self.fieldnames, self.fieldnames)))

    def writerow(self, row: dict[str, str]):
        to_write = []
        for name in self.fieldnames:
            to_write.append(row.get(name, ""))
        self.worksheet.update(f"{self.column}{self.current_row}", [to_write])
        self.current_row += 1

    def writerows(self, rows: list[dict[str, str]]):
        for row in rows:
            self.writerow(row)

I use this snippet like this:

August 21st, 2023 • google spreadsheets gspread python