使用 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)

Gspread documentation

数据格式如下:

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.1Gi0/0.100
  • 2 个值对应于 "A" 和 "B" 列。
  • 当在同一行找到 192.168.0.1Gi0/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.
  • 在这种情况下,可以检索行索引。

参考文献: