- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个Python程序,它从网站获取数据并将其分类到Google表格中的不同工作表中。该程序在追加和删除少量行时有效,但当我尝试插入或删除大量行时,我达到了 google api 配额限制。
根据我收集的信息,我相信解决方案是使用电子表格.values.batchUpdate() 方法,因为根据我收集的信息,它会立即发送所有请求,然后一旦它们被验证为特定工作表的有效请求他们全部立即被处决。不幸的是,没有 gspread 函数调用此方法,而且我目前在尝试使用原始 api 时失败了。
这就是我附加数据的方式
sheet = vt.sheet1
........
with open('objectbuffer.csv', encoding='utf-8') as bfile:
reader = csv.reader(bfile, delimiter=',')
#gets every worksheet in the spreadsheet
wkshts = vt.worksheets()
#each row in the csv is evaluated for
#and is copied into any corresponding worksheet one at a time
for row in reader:
kwsFound = 0
hasUploaded = False
appendRow = [row[0],row[1],row[2],row[3],row[4],row[5]]
#iterates through every dynamically created worksheet in the spreadsheet
for sheets in wkshts:
#if the title of the sheet is found anywhere within Column "E"
#then 1 is added to the number of keywords found
if sheets.title in row[4]:
kwsFound += 1
kwSheet = sheets
#if only one keyword (title of a worksheet) is found ANYWHERE in the row
#then that row is copied to the worksheet with the name found
if kwsFound == 1:
kwSheet.append_row(appendRow,"USER_ENTERED")
hasUploaded = True
#if no keyword is found/ more than 1 is found
#the row is copied to the conflicts worksheet (which is constant)
if hasUploaded == False:
conflicts.append_row(appendRow,"USER_ENTERED")
#every row is always copied to the main worksheet
sheet.append_row(appendRow,"USER_ENTERED")
kwsFound/kwsSheet 负责将数据分类到单独的工作表中。目前,我使用 gspreadappend_row 函数一次追加 1 个数据,这使我超出了 api 限制。
奖励问题
这就是我在程序中删除重复行的方法。由于删除请求一次发送 1 个,这也会导致程序超出 api 配额
allVal = sheet.get_all_values()
rowTot = len(sheet.get_all_values())
standard = ""
counter = 0
dcounter = 0
deleteRows = []
while counter<rowTot:
if allVal[counter] == standard:
deleteRows.append(counter)
else:
standard = allVal[counter]
counter+=1
while dcounter < len(deleteRows) :
sheet.delete_row(deleteRows[dcounter]-dcounter)
sleep(.5)
dcounter+=1
帮助将其变成批量更新将不胜感激
编辑:
以下是通过抓取我的 venmo 配置文件生成的 csv 示例。 http://www.filedropper.com/csvexample尽管我对其进行了编辑以删除个人信息。这是我想进入谷歌表格的输出示例 http://www.filedropper.com/gsheetsoutputexample ,所有交易都在主工作表上,但如果辅助工作表之一的标题显示在交易的描述(csv 的第 5 列)中,则该交易数据的副本也会放置在相应的工作表中。如果事务描述中出现 2 个或更多工作表标题(或没有),则该事务的副本将发送到冲突工作表。如果谷歌表格配额是无限的,那么我的代码将以描述的方式运行,而不必担心中断。
编辑2:
1.) 我想要做的是检查“E”列的值,如果其中一个工作表的标题是“E”列值的子字符串,则程序将该行附加到指定的工作表。因此,在本例中,“食物”、“食物!”和“我喜欢食物”的值都将附加到食物工作表中。
2.) 工作表名称不是恒定的。我正在构建的程序是供我的 friend 使用的,因此我制作了它,以便您通过 GUI 将命名工作表添加到电子表格中,以便他们可以创建自己的类别来过滤数据。如果您还有其他问题或者我没有澄清得足够好,请告诉我
编辑3:
为上面的代码添加了注释
最佳答案
为了让您不必等待太久,这里是 Google Sheets API Doc熟悉它后,我将同时针对您的具体情况创建解决方案。
使用 gspread 执行此操作,请参阅 doc
尝试这样的事情:
#!/usr/bin/python3
#This dict represents the request body for batchUpdate(body)
thisDict = {
"requests": [
{
#we append update commands to a list and then place that list here. Next we send thisDict as the body of a batchupdate.
}
],
"includeSpreadsheetInResponse": bool, #todo set this to bool value
"responseRanges": [
string #todo set this is string range
],
"responseIncludeGridData": bool #todo set this to bool value
}
#to contain our request objects
List = []
with open('objectbuffer.csv', encoding='utf-8') as bfile:
reader = csv.reader(bfile, delimiter=',')
wkshts = vt.worksheets()
for row in reader:
kwsFound = 0
hasUploaded = False
appendRow = [row[0],row[1],row[2],row[3],row[4],row[5]]
for sheets in wkshts:
if sheets.title in row[4]:
kwsFound += 1
kwSheet = sheets
if kwsFound == 1:
List.append("kwSheet.append_row(appendRow,'USER_ENTERED')") #append command to list
hasUploaded = True
if hasUploaded == False:
List.append("conflicts.append_row(appendRow,'USER_ENTERED')") #append command to list
List.append("sheet.append_row(appendRow,'USER_ENTERED')") #append command to list
thisDict["requests"] = List #set requests equal to the list of commands
spreadsheets.batchUpdate(thisDict) #send the request body with a list of command to execute.
关于python - 如何在不超过 API 配额的情况下将大量行追加到 Google 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57566249/
在 Python 中,我可以附加到一个空数组,例如: >>> a = [] >>> a.append([1,2,3]) >>> a.append([1,2,3]) >>> a [[1, 2, 3],
我正在阅读(并慢慢尝试)在 php 中与 txt 文件交互的方法。我已经尝试过追加,它将数据添加到txt文件的末尾但是 a+ 与 a 有何不同 在 w3schools 中它说: 一个 append 。
我想执行一个非常简单的操作:合并两个形状文件。具体来说,我有美国每个州的人口普查区域形状文件,我想将它们合并到一个形状文件中。最终,我想获取组合的形状文件并在一组经纬度坐标上执行叠加,以确定我的坐标属
当我们使用 append 和 cut 运算符时会出现什么问题? append2([],L,L):-!. append2([H|T],L,[H|TL]):-append2(T,L,TL).
我有一个函数处理程序: function handler(data) { console.log(`1. ${data}`); } 我想在相同的范围内附加或重新定义,如下所示: let old
我目前正在使用很多这样的内容来重构应用程序: StringBuffer buff1 = new StringBuffer(""); buff1.append("some value A"); buff
我正在编写一些代码来对不同类型的啤酒进行一些计算。我有一个使用 GUI 的主类,并有一个 JTextArea 来打印输出。在主类中调用追加工作得很好,但是当我尝试从外部类调用追加来写入文本区域时...
我有一个像这样的 jquery block 。渲染 html 后,我看到 标签立即打开和关闭,同样的方式,立即打开和关闭。我在他的代码中做错了什么吗?有更好的方法来实现这个吗? 谢谢 $.each(f
我在尝试克隆父 div 然后将其直接附加到其自身下方时遇到一个问题。只要最后一个节点是,我的函数就可以正常工作如此选择: A B C 将导致 A A.1
我正在尝试在现有 td 末尾附加一个 td。下面是以下代码(我在 jqgrid 中执行)。 $("#list_toppager_center tr:first td:eq(7)").append("C
我正在尝试在 jQuery 中的以下追加方法上设置超时。我尝试过的所有操作都不断返回Uncaught SyntaxError:意外的标识符 这是我的代码: setTimeout("$('#us
我想用 c 打开一个文件,然后向其中添加一些内容并关闭它。我只是想知道 fopen 中的 a+ 自动导航到文件的最后一个字符。 最佳答案 是的。 为什么不尝试一下,或者阅读一下手册呢? 这里是:
在我的代码中,我有一个输入字段,它是一个循环的值。 用户在第一个字段中输入所需的值。 用户单击按钮/徽章(单击我添加项目符号)以附加到模式。 根据字段中的输入值显示带有项目符号数的模态框。 例如,如果
是否可以使用 QUrlQuery 在不对 url 进行 strip 化的情况下 append 数据? 使用下面的代码将删除“?”之后的所有内容和结果是: https://foobar.com/Info
好吧,我正在为 iPhone 制作一个简单的聊天应用程序,我很幸运,它运行良好并且看起来很棒但是我有一些问题,一个这样的问题是我向用户显示富文本的方式.. 目前我有一个荒谬的系统,它是这样工作的 {发
在 C# 中格式化我做的字符串: string a = String.Format("/blah/blah/{0}_{1}/blah.html", int1, int2) 在Python中,它会自动将
我有一个 300 万行的 .txt 文件。该文件包含如下所示的数据: # RSYNC: 0 1 1 0 512 0 #$SOA 5m localhost. hostmaster.localhost.
我有一个问题。可以删除使用 javascript 附加添加的元素? 当我尝试删除添加的跨度时,什么也没有发生。 像这样: $(document).ready(function(){ $('#
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
到目前为止这是我的代码,我想做的是说用户输入 1 2 3 然后按 -1,他或她将被要求输入另一组数字,比如 9 8 7,我的程序是什么假设要做的是将它们显示为 1 2 3 9 8 7,而是像这样显示它
我是一名优秀的程序员,十分优秀!