使用 re 和 gspread 的多个搜索字符串
Multiple search strings with re and gspread
我刚开始使用 gspread 并正在寻找有关搜索 sheet 的一些建议。我想搜索多个字符串并获取两个字符串都存在的特定行的结果。两个字符串都必须匹配一个结果(逻辑与)
搜索字符串的一个示例是搜索 IP 地址和主机名。在 sheet 中,IP 地址将在单元格 A1 中,主机名将在 B1 中。
我正在使用他们文档中的以下代码示例,并尝试了各种迭代,但运气不佳。
amount_re = re.compile(r'(192.168.0.1|Gi0/0.100)')
cell = worksheet.find(amount_re)
数据格式如下:
192.168.0.1,Gi0/0.100
192.168.0.1,Gi0/0.200
192.168.0.1,Gi0/0.300
192.168.0.2,Gi0/0.100
如您所见,A 列和 B 列中存在重复项,因此获得唯一结果的唯一方法是同时搜索两者。例如
192.168.0.1,Gi0/0.100
但它需要采用 Gspread 搜索格式。我不能只搜索字符串 '192.168.0.1,Gi0/0.100'
我相信你的目标如下。
- 您想从 Google Spreadsheet.
中的 sheet 搜索 2 个值,例如 192.168.0.1
和 Gi0/0.100
- 2 个值对应于 "A" 和 "B" 列。
- 当在同一行找到
192.168.0.1
和 Gi0/0.100
等 2 个值时,您想检索这些值。
- 您想通过 python.
使用 gspread 来实现此目的
- 您已经使用 Sheets API.
为 Google Spreadsheet 获取和放置值
为了实现你的目标,这个答案怎么样?
我认为很遗憾,re.compile(r'(192.168.0.1|Gi0/0.100)')
不能用于实现您的目标。所以在这里,我想提出以下2种模式。
模式 1:
在此模式中,使用查询语言搜索值。访问令牌可以从 gspread 的授权中使用。
示例脚本:
searchValues = ["192.168.0.1", "Gi0/0.100"] # Please set the search values.
spreadsheet_id = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheet_id)
ws = ss.worksheet(sheetName)
sheet_id = ws._properties['sheetId']
access_token = client.auth.token_response['access_token']
query = "select * where A='" + \
searchValues[0] + "' and B='" + searchValues[1] + "'"
url = 'https://docs.google.com/spreadsheets/d/' + \
spreadsheet_id + '/gviz/tq?tqx=out:csv&gid=' + \
str(sheet_id) + '&tq=' + urllib.parse.quote(query)
res = requests.get(url, headers={'Authorization': 'Bearer ' + access_token})
ar = [row for row in csv.reader(io.StringIO(res.text), delimiter=',')]
print(ar)
- 在这种情况下,当找到搜索值时,
ar
具有搜索到的行。当未找到搜索值时,ar
的长度为 0
.
- 在这种情况下,无法检索行索引。
模式二:
在此模式中,首先从作品中检索所有值sheet,然后搜索这些值。
示例脚本:
searchValues = ["192.168.0.1", "Gi0/0.100"] # Please set the search values.
spreadsheet_id = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheet_id)
ws = ss.worksheet(sheetName)
values = ws.get_all_values()
ar = [{"rowIndex": i, "value": e} for i, e in enumerate(
values) if e[0] == searchValues[0] and e[1] == searchValues[1]]
print(ar)
- 在这种情况下,当找到搜索值时,
ar
具有行索引和搜索行的值。当未找到搜索值时,ar
的长度为 0
.
- 在这种情况下,可以检索行索引。
参考文献:
我刚开始使用 gspread 并正在寻找有关搜索 sheet 的一些建议。我想搜索多个字符串并获取两个字符串都存在的特定行的结果。两个字符串都必须匹配一个结果(逻辑与)
搜索字符串的一个示例是搜索 IP 地址和主机名。在 sheet 中,IP 地址将在单元格 A1 中,主机名将在 B1 中。
我正在使用他们文档中的以下代码示例,并尝试了各种迭代,但运气不佳。
amount_re = re.compile(r'(192.168.0.1|Gi0/0.100)')
cell = worksheet.find(amount_re)
数据格式如下:
192.168.0.1,Gi0/0.100
192.168.0.1,Gi0/0.200
192.168.0.1,Gi0/0.300
192.168.0.2,Gi0/0.100
如您所见,A 列和 B 列中存在重复项,因此获得唯一结果的唯一方法是同时搜索两者。例如
192.168.0.1,Gi0/0.100
但它需要采用 Gspread 搜索格式。我不能只搜索字符串 '192.168.0.1,Gi0/0.100'
我相信你的目标如下。
- 您想从 Google Spreadsheet. 中的 sheet 搜索 2 个值,例如
- 2 个值对应于 "A" 和 "B" 列。
- 当在同一行找到
192.168.0.1
和Gi0/0.100
等 2 个值时,您想检索这些值。 - 您想通过 python. 使用 gspread 来实现此目的
- 您已经使用 Sheets API. 为 Google Spreadsheet 获取和放置值
192.168.0.1
和 Gi0/0.100
为了实现你的目标,这个答案怎么样?
我认为很遗憾,re.compile(r'(192.168.0.1|Gi0/0.100)')
不能用于实现您的目标。所以在这里,我想提出以下2种模式。
模式 1:
在此模式中,使用查询语言搜索值。访问令牌可以从 gspread 的授权中使用。
示例脚本:
searchValues = ["192.168.0.1", "Gi0/0.100"] # Please set the search values.
spreadsheet_id = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheet_id)
ws = ss.worksheet(sheetName)
sheet_id = ws._properties['sheetId']
access_token = client.auth.token_response['access_token']
query = "select * where A='" + \
searchValues[0] + "' and B='" + searchValues[1] + "'"
url = 'https://docs.google.com/spreadsheets/d/' + \
spreadsheet_id + '/gviz/tq?tqx=out:csv&gid=' + \
str(sheet_id) + '&tq=' + urllib.parse.quote(query)
res = requests.get(url, headers={'Authorization': 'Bearer ' + access_token})
ar = [row for row in csv.reader(io.StringIO(res.text), delimiter=',')]
print(ar)
- 在这种情况下,当找到搜索值时,
ar
具有搜索到的行。当未找到搜索值时,ar
的长度为0
. - 在这种情况下,无法检索行索引。
模式二:
在此模式中,首先从作品中检索所有值sheet,然后搜索这些值。
示例脚本:
searchValues = ["192.168.0.1", "Gi0/0.100"] # Please set the search values.
spreadsheet_id = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheet_id)
ws = ss.worksheet(sheetName)
values = ws.get_all_values()
ar = [{"rowIndex": i, "value": e} for i, e in enumerate(
values) if e[0] == searchValues[0] and e[1] == searchValues[1]]
print(ar)
- 在这种情况下,当找到搜索值时,
ar
具有行索引和搜索行的值。当未找到搜索值时,ar
的长度为0
. - 在这种情况下,可以检索行索引。