Множество строк поиска с повторным и сложным - PullRequest
0 голосов
/ 23 апреля 2020

Я только начал использовать gspread и искал несколько советов по поиску листа. Я хочу найти несколько строк и получить результаты указанной строки c, где существуют обе строки. Обе строки должны совпадать для результата (логическое И)

Примером строки поиска будет поиск IP-адреса И имени хоста. В листе 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'

1 Ответ

0 голосов
/ 25 апреля 2020

Я считаю, что ваша цель, как показано ниже.

  • Вы хотите найти 2 значения, например 192.168.0.1 и Gi0/0.100, из листа в таблице Google.
  • 2 значения находятся в столбцах «A» и «B».
  • Когда 2 значения, такие как 192.168.0.1 и Gi0/0.100 находятся в одной строке, вы хотите получить значения.
  • Вы Вы хотите добиться этого, используя gspread с python.
  • Вы уже получили и выставили значения для Google Spreadsheet с помощью API Sheets.

Для достижения вашей цели, как насчет этого ответа? ?

Я думаю, что, к сожалению, 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.
  • В этом случае индекс строки не может быть получен.

Pattern 2:

В этом шаблоне сначала все значения извлекаются из листа, и значения ищутся.

Пример сценария:

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.
  • В этом случае можно получить индекс строки.

Ссылки:

...