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: