#python #csv #pdf
#питон #csv #PDF
Вопрос:
НОВОЕ обновление 11:30 утра по восточному времени Ниже приведен мой полный код
Желаемыми результатами будут файлы txt в этом формате:
Логический идентификатор: (amp;) 192.168.xx.xxx (если в нем есть и то, и другое)
192.168.xx.xxx
Логический идентификатор:
192.168.xx.xxx
192.168.xx.xxx
Логический идентификатор:
Логический идентификатор:
192.168.xx.xxx
**Последний код-gt; Я хочу напечатать ЛОГИЧЕСКИЙ идентификатор, если он существует, если нет, я хочу, чтобы он напечатал IP-адрес (в новой форме).
Код показывает, что я указал файл model.csv для записи в model.txt и придется вручную менять его модель за моделью. Так что, если для этого есть решение, это тоже было бы здорово
import csv import re import sys sys.stdout = open("C:\Users\ADMIN-SURV\Desktop\data_pull\2.0C-H4A-DC2 .txt", 'w') with open('C:\Users\ADMIN-SURV\Desktop\data_pull\2.0C-H4A-DC2_filter.csv') as fid: inputfile = csv.reader(fid) for row in inputfile: if len(row) gt;= 4: if row[0] == 'File name': # skip the header row continue m = re.match(r".*(.* [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})", row[3]) if m: print(m.group(1)) else: print(row[3]) sys.stdout.close()
*** строка синтаксического анализа ошибки: модель не найдена H4SL-D1(2305854) Avigilon (ONVIF) 1.3 C-H4SL-D1 Неизвестно 192.168.50.250 00:18:85:***
*** строка синтаксического анализа ошибки: модель не найдена H4SL-D1(2878617) Avigilon (ONVIF) 1.3 C-H4SL-D1 Неизвестно 192.168.50.194 00:18:85:***
Avigilon (ONVIF) 1.3 C-H4SL-D1 Неизвестен Логический идентификатор:1026 *** строка синтаксического анализа ошибки: модель не найдена Неподдерживаемая SOUTH LV Avigilon (ONVIF) 1.3 C-H4SL-D1 Неизвестна 192.168.206.250 00:18:85:***
Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:3027 *** error parsing line: model not found ELEVATOR GROUND FL Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown 192.168.80.203 00:18:85:***
Of course, that is a small chunk of the return.
I want to add that the CSV file is actually specifically for the model specifically, so all I actually have to do is pull the logical ID’s out of the first column and add them to a list under the defined mode and if there is no Logical ID attached, then return the IP address that is given.
I searched for all instances of an item and saved the results as a CSV file. I am using python to try and grab specific information. I would love to add a photo but I am not allowed.
This is the error i am receiving
Traceback (most recent call last): File «C:UsersADMIN-SURVPycharmProjectspdf_scrapingtest_file.,py», line 7, in print(column[3]) IndexError: list index out of range
This is the only code I have written:
import csv inputfile = csv.reader(open('C:\Users\ADMIN-SURV\Desktop\data_pull\Untitled.csv','r')) for column in inputfile: print(column[3])
When I get rid of the [3] in the last line and just leave
print(column)
It prints my entire CSV file in the console. All I want is specific information from each row and I can get that info by grabbing it from a specific column.
The CSV file data looks like this:
Search Results" "Summary" "Saved on","12/8/2021 1:57:21 PM" "Searched for","Avigilon (ONVIF) 1.3C-H4SL-D1" "In document","C:UsersADMIN-SURVDesktopdata_pullIslandView.pdf" "Number of document(s) found","1" "Number of instance(s) found","551" "File name","Title","Page","Search Instance" "IslandView.pdf","","5","Detection: Unsupported 2058 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2058 192.168.202.206 " "IslandView.pdf","","9","BAR POS 01 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown 192.168.70.214 00:18:85:" "IslandView.pdf","","9","H4SL-D1(1866954) Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:481 192.168.11.203 " "IslandView.pdf","","9","H4SL-D1(1825930) Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:20 192.168.16.203 " "IslandView.pdf","","9","Detection: Unsupported 2048 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown 192.168.202.200 00:18:85:" "IslandView.pdf","","9","H4SL-D1(1866877) Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:92 192.168.15.205 " "IslandView.pdf","","9","Detection: Unsupported 2074 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2074 192.168.203.241 " "IslandView.pdf","","9","Detection: Unsupported 2174 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2174 192.168.201.232 " "IslandView.pdf","","9","Detection: Unsupported 2161 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2161 192.168.205.231 "
there are over 500 lines. You can see the column headers
"File name","Title","Page","Search Instance"
Все, что мне нужно, — это номер модели и логическая идентификационная информация из первого столбца. Я хочу изолировать, а затем составить организованный список того, какой логический идентификатор связан с какой моделью.
На всякий случай, это пример номера модели и логического идентификатора из столбца 1
Avigilon (ONVIF) 1.3 C-H4SL-D1 Логический идентификатор: 875
Конечная цель состоит в том, чтобы создать лист, на котором указана каждая модель (это результаты поиска для одной модели), а под этим списком перечислены ВСЕ логические идентификаторы, связанные с этой моделью.
Дайте мне знать, если я смогу уточнить или предоставить какую-либо дополнительную информацию.
Спасибо!
Ответ №1:
Верхняя часть вашего CSV-файла содержит строки с менее чем 4 столбцами. Чтобы избежать ошибки IndexError, сначала попробуйте проверить длину строки:
# "inputfile" is a CSV reader instance for row in inputfile: if len(row) gt;= 4: print(row[3])
Вот вариант, в котором используется регулярное выражение для выделения имени модели, останавливающееся на IP-адресе:
import re with open('example_data.csv') as fid: inputfile = csv.reader(fid) for row in inputfile: if len(row) gt;= 4: if row[0] == 'File name': # skip the header row continue m = re.match(r'.*(Avigilon.* [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})', row[3]) if m: print(m.group(1)) else: print(f'*** error parsing line: model not found {row[3]}***')
который для приведенных выше данных печатает:
Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2058 192.168.202.206 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown 192.168.70.214 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:481 192.168.11.203 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:20 192.168.16.203 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown 192.168.202.200 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:92 192.168.15.205 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2074 192.168.203.241 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2174 192.168.201.232 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown Logical ID:2161 192.168.205.231 Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown 192.168.50.246
Чтобы записать выходные данные в текстовый файл, попробуйте сделать что-то вроде этого:
with open('logfile.txt', 'w') as fout: with open('example_data.csv') as fid: inputfile = csv.reader(fid) for row in inputfile: if len(row) gt;= 4: if row[0] == 'File name': # skip the header row continue m = re.match(r'.*(Avigilon.* [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})', row[3]) if m: # optional: delete this print line print(m.group(1)) fout.write(f'{m.group(1)}n') else: print(f'*** error parsing line: model not found {row[3]}***')
Комментарии:
1. Я начну работать над этим прямо сейчас! Спасибо
2. Я получаю это при запуске точного кода, который вы написали. «*** строка синтаксического анализа ошибки: модель не найдена H4SL-D1(2210685) Avigilon (ONVIF) 1.3 C-H4SL-D1 Неизвестно 192.168.50.246 00:18:85:***»
3. и если логического идентификатора нет, как я могу заставить его прочитать IP-адрес в другом столбце? Я сейчас читаю о регулярных выражениях, у меня очень мало знаний о python. Я действительно ценю это и хотел бы, чтобы вы ответили!
4. @dschulz1227 — вместо этого ответ обновлен, чтобы соответствовать IP-адресу
5. вам тоже нужен IP-адрес? если вы переместите правую») «(в настоящее время после
Avigilon.*
) на «после последнего[0-9]{1,3}
«, IP-адрес будет напечатан вместе с остальными.