用python解析csv文件到Google电子表格的数据
我正在编写一个python脚本,将数据从csv文件发送到Google电子表格。我对这个项目的基本需求有一个清晰的理解,但是我完全不知道如何格式化/解析从csv文件到google工作表的数据。我还在学习python 下面是我代码的第一部分:用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:
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()