dogrunjp
5/12/2015 - 2:09 AM

PythonでGoogle spreadsheetからレコードを取得しリストに変換する方法

PythonでGoogle spreadsheetからレコードを取得しリストに変換する方法

PythonでGoogle spreadsheetのデータを取得し、リストに変換、さらにJSONを生成するには…

まずはレコードの取得

スプレッドシートのレコードオブジェクトをシート名を指定し取得します。

dbClient = gdata.spreadsheet.service.SpreadsheetsService(username, passwd)
dbClient.ProgrammaticLogin()
q = gdata.spreadsheet.service.ListQuery()
q['title'] = '<スプレッドシートの名前>'
feed = dbClient.GetSpreadsheetsFeed(query=q)
spread_id = feed.entry[0].id.text.rsplit('/',1)[1]
records = dbClient.GetListFeed(spread_id).entry

辞書型のリストを生成

上記の操作で取得できるオブジェクトのリストは、中身の構造が…よくわかりません。。。 そんななので、text_dbというモジュールでspreadsheetを扱いやすいように変換します。 text_dbを使うとスプレッドシートをDBのように扱うことができます。

text_dbでスプレッドシートのrowを辞書型に変換しリストにappendしていけば辞書型のリストを取得できます。

articles = []
for entry in records:
    article = gdata.spreadsheet.text_db.Record(row_entry=entry)
    articles.append(article.content)

特定のカラムのみ取得したい場合はdict内包表記でdictに変換された行のデータをフィルターすればOK。 下記例では項目名が'id'および'title'のカラムのみ含むdictを生成しリストにappendしています。

articles = []
for entry in records:
    article = gdata.spreadsheet.text_db.Record(row_entry=entry)
    col = article.content
    id = {k: v for k, v in col.items() if k == 'id' or k == 'title'}
    articles.append(id)

JSONファイルを書き出す

with open('<ファイルネーム>', 'w') as f:
    json.dump(articles, f)

参考になる記事

text_dbについて

google spreadsheetのAPI全般について