首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CSV文件中提取特定的字符串和整数并使用python将其写入.txt文件。

从CSV文件中提取特定的字符串和整数并使用python将其写入.txt文件。
EN

Stack Overflow用户
提问于 2021-12-08 20:47:47
回答 1查看 82关注 0票数 -1

新更新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,并且必须手动地逐个修改它的模型。所以如果有解决办法的话,那也太好了

代码语言:javascript
运行
复制
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:超出范围的列表索引

这是我编写的唯一代码:

代码语言:javascript
运行
复制
import csv

inputfile = csv.reader(open('C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\Untitled.csv','r'))

for column in inputfile:
   print(column[3])

当我去掉最后一行的3然后离开

代码语言:javascript
运行
复制
print(column)

它在控制台中打印我的整个CSV文件。我所需要的只是来自每一行的特定信息,我可以从特定的列中获取该信息。

CSV文件数据如下所示:

代码语言:javascript
运行
复制
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多条线。您可以看到列标题。

代码语言:javascript
运行
复制
"File name","Title","Page","Search Instance" 

我只需要第一列中的模型号和逻辑ID信息。然后,我想分离出一个有组织的列表,列出哪个逻辑ID与哪个模型相关。

以防万一,这是第1列中的模型号和逻辑ID示例

A84 D1 (ONVIF) 1.3C-H4SL-D1逻辑ID: 875

最终目标是创建一个表,其中列出每个模型(这是一个模型的搜索结果),并在该列表下面列出与该模型相关的所有逻辑ID。

如果我能澄清或提供任何进一步的信息,请告诉我。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-08 21:09:19

CSV文件的顶部包含少于4列的行。为了避免IndexError,请先尝试测试行长度:

代码语言:javascript
运行
复制
# "inputfile" is a CSV reader instance
for row in inputfile:
    if len(row) >= 4:
        print(row[3])

下面是一个使用正则表达式来划分模型名称的变体,停在IP地址上:

代码语言:javascript
运行
复制
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]}***')

对于上面的数据打印:

代码语言:javascript
运行
复制
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

要将输出写入文本文件,请尝试如下所示:

代码语言:javascript
运行
复制
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]}***')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70281527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档