如何更新谷歌硬盘文件

2024-06-16 10:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我想做的:

data = drive.files().get_media(fileId=fileId).execute()
csvData = [row.split(",") for row in str(data, 'latin-1').split("\n")]
ar = []
temp = []
for i, row in enumerate(csvData):
    if "".join(row) != "":
        temp.append(row)
    else:
        ar.append(temp)
        temp = []
    if i == len(csvData) - 1:
        ar.append(temp)

# Create request body for the method of spreadsheets.create of Sheets API. [Tanaike]
sheetsObj = []
for sheet in ar:
    tempRow = []
    for row in sheet:
        tempCol = []
        for col in row:
            tempCol.append({"userEnteredValue": {"stringValue": col}})
        if len(tempCol) != 0:
            tempRow.append({"values": tempCol})
    if len(tempRow) != 0:
        sheetsObj.append({"data": [{"rowData": tempRow}]})

# Request to Sheets API. [Tanaike]
body = {"properties": {"title": "spreadsheetTitle"}, "sheets": sheetsObj}
res = sheets.spreadsheets().create(body=body).execute()
print(res)

我最近问了一个关于通过谷歌API将文件上传到谷歌硬盘的问题。我在代码方面取得了成功,但现在我意识到我需要一个单独的代码,它不是将数据上传到新文件中,而是更新现有的谷歌表单

我一直在与batchUpdate()(https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate)作斗争,因为我不知道如何将sheetsObj的旧解决方案融入其中

这个想法和这里一样:Google docs formatting, converting texts into sheets

我希望用.txt格式的数据更新现有的google sheets文件,但我希望更新现有的google sheets文件,而不是简单地上传并创建新文件

  • 其思想是覆盖现有文件中的任何内容。假设文件id是已知的

注:有一件奇怪的事情我之前没有注意到:所有的单元格都以'开头,我正在尝试处理它,但是如果有人在我之前就发现了,请将它包含在解决方案中


Tags: 文件infordataifbodytemprow
1条回答
网友
1楼 · 发布于 2024-06-16 10:21:29
  • 您希望使用以下值中的CSV数据更新现有电子表格。这些值来自Google docs formatting, converting texts into sheets

    ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY, 
    3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02, 
    6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15, 
    5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04, 
    
    ID, PRICE, STOCK, ASDF, BASDF, CASDF,
    
    ID, NAME, PRICE, DESCRIPTION, 
    2, pen, 1.5, The pen is mightier than the sword, 
    3, pencil, 1.0, Can be used to write, 
    4, RPG, 150.0, well that escalated quickly, huh, 
    
    EMPTY, 
    names, 
    goofs, 
    
    ID, FLAVOR, 
    
  • 现有电子表格有5张表格,可使用5张表格的CSV数据进行更新

  • 您希望通过使用带有python的google api python客户端来实现这一点
  • 您已经能够使用Sheets API获取和输入电子表格的值

如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

流量:

  1. 从CSV文件中检索值
  2. 解析每个工作表的值,并创建请求主体
  3. 使用创建的请求正文向现有电子表格发出请求。
    • 在本例中,我使用了spreadsheets.values.batchUpdate方法

修改的脚本:

在运行脚本之前,请设置变量csvFileIdspreadsheetIdsheetNames

csvFileId = '###'  # Please set the CSV file ID.
spreadsheetId = '###'  # Please set the Spreadsheet ID.
sheetNames = ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5']  # Please set the sheet names in the Spreadsheet for updating.

sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)

# Retrieve data from Google Drive and parse data as an array.
data = drive.files().get_media(fileId=csvFileId).execute()
csvData = [row.split(",") for row in str(data, 'utf-8').split("\n")]
ar = []
temp = []
for i, row in enumerate(csvData):
    if "".join(row) != "":
        row = [v.strip() for v in row]
        temp.append(row)
    else:
        ar.append(temp)
        temp = []
    if i == len(csvData) - 1:
        ar.append(temp)

valuesUpdateReq = []
for i, sheet in enumerate(ar):
    if bool(sheet):
        sheetName = sheetNames[i]
        valuesUpdateReq.append({"values": sheet, "range": sheetName, "majorDimension": "ROWS"})

# Request to Sheets API.
batch_update_values_request_body = {"data": valuesUpdateReq, "valueInputOption": "USER_ENTERED"}
res = sheets.spreadsheets().values().batchUpdate(spreadsheetId=spreadsheetId, body=batch_update_values_request_body).execute()
print(res)

注:

  • 在上面的脚本中,这些值被放入带有“用户输入”的电子表格中。通过这种方式,可以将值解析为字符串、数字和日期。而且,不使用字符顶部的单引号

参考资料:

如果我误解了你的问题,而这不是你想要的方向,我道歉

相关问题 更多 >