不确定我的头衔是否清晰。这是我想要做的。一方面,我有一个4行的csv文件:
01/01/2017,value,value,value
02/01/2017,value,value,value
03/01/2017,value,value,value
04/01/2017,value,value,value另一方面,我有一个只有2行的Google电子表格:
01/01/2017,value,value,value
02/01/2017,value,value,value我想用与csv文件相比缺少的两行来更新google电子表格:以03/01/2017和04/01/2017开头的行
我有以下代码:
def add_todo():
csvselection = []
with open('data.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
csvselection.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 = 'XXXXIDXXXX'
rangeName = 'Class Data!A2:E'
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheetId, range=rangeName).execute()
gsselection = result.get('values', [])csvselection是一个列表列表(?)来自csv文件和gsselection的列表(?)从电子表格中。
我真的不知道什么是最有效的解决方案来比较我的两个列表,并只选择我想要传递到我的Google工作表中的缺少的行。
我想使用这样的东西:
for row in gsselection:
if row in csvselection:
print(row)如果我是正确的,这应该返回我不想在我的电子表格中复制的行,所以我需要排除它们。然而,这部分代码不起作用,我只需要比较列表列表的前几个元素。我想了想:
for row[n][0] in gsselection:
if row[n][0] in csvselection:
print(row)但是我现在也不知道该如何正确地编写这个操作。
为了便于说明和回答,下面是我用来将我想要的数据传递到google工作表中的代码的一部分:
values = {'values': test}
result = service.spreadsheets().values().append(
spreadsheetId=spreadsheetId, range='A:C',
valueInputOption='RAW',
body=values).execute()有什么想法吗?
谢谢!
发布于 2017-01-25 18:15:12
试着像这样对待熊猫:
import pandas as pd
df = pd.read_csv('csvfile', header=None)
df2 = pd.read_excel('googlesheet', header=None)
df3 = pd.concat([df,df2]).drop_duplicates([0])
df3.to_excel('final_file')https://stackoverflow.com/questions/41848528
复制相似问题