新更新11:30 CST是我的完整代码
所需的结果将是以这种格式的txt文件:
逻辑ID:(&) 192.168.xx.xxx (如果两者都有) 192.168.xx.xxx逻辑ID: 192.168.xx.xxx 192.168.xx.xxx逻辑ID:逻辑ID: 192.168.xx.xxx
**最新的代码->我想打印逻辑ID如果存在,如果没有,我希望它打印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) >= 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) A84 D1 (ONVIF) 1.3C-H4SL-D1未知192.168.50.250 00:18:85:*错误分析线:模型未找到H4SL-D1(2878617) A骤龙(ONVIF) 1.3C-H4SL-D1未知192.168.50.194 00:18:85:**阿斯康(ONVIF) 1.3C-H4SL-D1未知逻辑ID:1026 **错误解析线:模型未被发现不支持南方LV A84 FL (ONVIF) 1.3C-H4SL-D1未知192.168.206.250 00:18:85:*阿斯隆(ONVIF) 1.3C-H4SL-D1未知逻辑ID:3027 *错误解析线:模型未找到电梯地面FL A骤FL (ONVIF) 1.3C-H4SL-D1未知192.168.80.203 00:18:85:*
当然,这是回报的一小部分。
我想补充的是CSV文件实际上是专门针对模型的,所以我要做的就是从第一列中提取逻辑ID,并在定义模式下将它们添加到列表中,如果没有附加逻辑ID,则返回给定的IP地址。
我搜索项目的所有实例,并将结果保存为CSV文件。我正在使用python尝试获取特定的信息。我很想加一张照片,但我不被允许。
这是我收到的错误
文件"C:\Users\ADMIN-SURV\PycharmProjects\pdf_scraping\test_file.,py,第7行,打印(Column3) IndexError:超出范围的列表索引
这是我编写的唯一代码:
import csv
inputfile = csv.reader(open('C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\Untitled.csv','r'))
for column in inputfile:
print(column[3])
当我去掉最后一行的3然后离开
print(column)
它在控制台中打印我的整个CSV文件。我所需要的只是来自每一行的特定信息,我可以从特定的列中获取该信息。
CSV文件数据如下所示:
Search Results"
"Summary"
"Saved on","12/8/2021 1:57:21 PM"
"Searched for","Avigilon (ONVIF) 1.3C-H4SL-D1"
"In document","C:\Users\ADMIN-SURV\Desktop\data_pull\IslandView.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 "
有500多条线。您可以看到列标题。
"File name","Title","Page","Search Instance"
我只需要第一列中的模型号和逻辑ID信息。然后,我想分离出一个有组织的列表,列出哪个逻辑ID与哪个模型相关。
以防万一,这是第1列中的模型号和逻辑ID示例
A84 D1 (ONVIF) 1.3C-H4SL-D1逻辑ID: 875
最终目标是创建一个表,其中列出每个模型(这是一个模型的搜索结果),并在该列表下面列出与该模型相关的所有逻辑ID。
如果我能澄清或提供任何进一步的信息,请告诉我。
谢谢!
发布于 2021-12-08 21:09:19
CSV文件的顶部包含少于4列的行。为了避免IndexError,请先尝试测试行长度:
# "inputfile" is a CSV reader instance
for row in inputfile:
if len(row) >= 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) >= 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) >= 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]}***')
https://stackoverflow.com/questions/70281527
复制相似问题