用python解析csv文件到Google电子表格的数据

用python解析csv文件到Google电子表格的数据,python,arrays,json,csv,Python,Arrays,Json,Csv,我正在编写一个python脚本,将数据从csv文件发送到Google电子表格。我对这个项目的基本需求有一个清晰的理解,但是我完全不知道如何格式化/解析从csv文件到google工作表的数据。我还在学习python 下面是我代码的第一部分: def add_todo(): credentials = get_credentials() http = credentials.authorize(httplib2.Http()) discoveryUrl = ('https:

我正在编写一个python脚本,将数据从csv文件发送到Google电子表格。我对这个项目的基本需求有一个清晰的理解,但是我完全不知道如何格式化/解析从csv文件到google工作表的数据。我还在学习python

下面是我代码的第一部分:

def add_todo():

    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = 'spreadsheetidhere'
    rangeName = 'A1:A'
    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __name__ == '__main__':
    add_todo()
test = []
with open('data.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
            test.append(row)
我不是自己写的,它工作得很好

以下是我代码的第二部分:

def add_todo():

    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = 'spreadsheetidhere'
    rangeName = 'A1:A'
    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __name__ == '__main__':
    add_todo()
test = []
with open('data.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
            test.append(row)
它也能正常工作,尽管我真的不知道如何将它与代码的第一部分混合。我已经做到了:

test = []

def add_todo():
    with open('snap.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
                test.append(row)
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1UJGs-gJCIUDv5jg5-p0MPEqsokYu5k2MfJ8A5oBkpWs'
    rangeName = 'A1:A'

    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __name__ == '__main__':
    add_todo()
您可以猜到,我主要关心的是如何将数据从测试数组传递到电子表格值values={'values':[['Hello Saturn',],]}

我想做这样的事情:values={'values':[test]},但显然它不起作用

总而言之,以下是我的csv文件:

data1,data2,data3,data4,...
value1x,value2x,value3x,value4x,...
value1y,value2y,value3y,value4y,...
value1z,value2z,value3z,value4z,...
以下是我想要的电子表格:

data1   data2   data3   data4 //col name
value1x value2x value3x value4x //row1
value1y value2y value3y value4y //row2
etc...
我完全迷失在数组、列表和json格式之间

您需要在主API调用中指定范围参数和主体。如果你看一下,你会发现身体需要有以下形式

values = [
    [
        # Cell values ...
    ],
    # Additional rows ...
]
body = {
  'values': values
}
也就是说,具有一个元素值的字典是一个列表列表。包含CSV数据的测试变量已显示为列表列表,因此您可以继续。这里不需要担心JSON,因为API的Python接口会自动将Python字典和列表转换为JSON。 range参数有点复杂,但基于使用工作表名称的文档,它会将值附加到该工作表的末尾。综上所述,您的代码可能看起来像这样,我还没有对其进行测试:

def add_todo():
    test = []  # test should be initialized in the function body
    with open('snap.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
                test.append(row)
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1UJGs-gJCIUDv5jg5-p0MPEqsokYu5k2MfJ8A5oBkpWs'

    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values': test}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=spreadsheetId,
        valueInputOption='RAW',
        body=values).execute()

if __name__ == '__main__':
    add_todo()