首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使这段代码在找到逻辑ID和IP地址后生成新行?

如何使这段代码在找到逻辑ID和IP地址后生成新行?
EN

Stack Overflow用户
提问于 2021-12-13 20:22:52
回答 2查看 48关注 0票数 -1

我正在编写一个脚本,从CSV文件中提取信息并将其粘贴到.txt文件中。在我提取该文本之后,通过一个脚本运行txt文件,该脚本应该删除所有重复的文本。每一行数据都有很多信息。每一行都应该有一个IP地址和一个逻辑is。下面是我的csv文件的示例。

代码语言:javascript
运行
复制
"IslandView.pdf","","92","D1-B(2044556) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:558 "
"IslandView.pdf","","92","Detection: Disabled 2318 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:2318 "
"IslandView.pdf","","92","Detection: Disabled 1042 Avigilon (ONVIF) 3.0C-H4A-D1-B South Pool Deck Logical "
"IslandView.pdf","","92","D1-B(2086446) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:101 "
"IslandView.pdf","","92","Detection: Disabled 1016 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:1016 "
"IslandView.pdf","","92","Detection: Disabled 2013 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:2013 "
"IslandView.pdf","","92","Detection: Disabled 2007 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:2007 "
"IslandView.pdf","","92","Detection: Disabled 2092 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:2092 "
"IslandView.pdf","","92","H5A-D1(3022620) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown 192.168.60.244 00:18:"
"IslandView.pdf","","92","D1-B(2230651) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:411 "
"IslandView.pdf","","92","D1-B(2251578) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:512 "
"IslandView.pdf","","92","D1-B(2300912) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:451 "
"IslandView.pdf","","92","D1-B(2345291) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:410 "
"IslandView.pdf","","92","D1-B(2345293) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:149 "
"IslandView.pdf","","93","D1-B(2345337) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:161 "
"IslandView.pdf","","93","D1-B(2345304) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:357 "
"IslandView.pdf","","93","D1-B(2738897) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:193 "
"IslandView.pdf","","94","D1-B(2959462) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:380 "
"IslandView.pdf","","94","D1-B(2959515) Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown Logical ID:721 "
"IslandView.pdf","","102","Detection: Unsupported 1001 Avigilon (ONVIF) 3.0C-H4A-D1-B valet key control Logical "
"IslandView.pdf","","102","Detection: Disabled 2168 Avigilon (ONVIF) 3.0C-H4A-D1-B Dockside Deli Logical ID:"
"IslandView.pdf","","140","Detection: Disabled 2318 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown 192.168.205.216 00:18:"
"IslandView.pdf","","140","Detection: Unsupported 3012 Avigilon (ONVIF) 3.0C-H4A-D1-B Unknown 192.168.200.241 00:18:"

正如我所说的,如果您查看每一行前面都有“IslandView.”有一个逻辑ID就在那个IP地址后面。但是在某些行中没有列出IP地址,因此,它不是在下一行上插入一个带有下一个逻辑ID的新行,而是将它们保留在所有一行上,直到它通过一个IP地址并创建一个新行为止。

我面临的一个问题是,如果我将"\n“放在one语句中,它将在一行上打印一行的逻辑ID,然后在下一行上打印IP

我知道这将是代码中我的\n错误,但我找不到修复程序

下面是我的脚本中的代码,它从csv中提取数据并输入到.txt中:

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

new_file = input("What is the camera model? **Use Exact Casing and Symbols** ")
file_path = "C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\filter_results\\"
end_path = file_path + new_file + ".txt"
print(end_path)

output_txt_file = open(end_path, 'x')
with open("C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\" + new_file + "_filter.csv", "r") as fid:
    # print(fid)
    input_file = csv.reader(fid)
    for row in input_file:
        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))
                output_txt_file.write(m.group(1).strip() + '\n')

            else:
                # find only integer string
                res = [int(i) for i in row[3].split() if i.isdigit()]
                # print(str(res))
                output_txt_file.write(str(res))
                # print("No IP or Logical ID")

sys.stdout.close()

下面是.txt文件的一个示例:

代码语言:javascript
运行
复制
192.168.205.216
192.168.70.171
[]192.168.50.195
192.168.50.193
[][2065][1041][1010][2119][2093][2051][2110][2091]192.168.202.212
[1014][2169]192.168.201.219
[2135][2118][2090]192.168.202.215
192.168.202.213
[1046][2040][2076]192.168.202.216
[2039][3012][2030][2166][2145][3011][2109][3025]192.168.202.217
192.168.201.223
192.168.201.205
192.168.201.200
192.168.201.217
192.168.202.218
[3019][2043][2006][][1031][2035][2005][2041][2037][][][][][][][2170][][][][][]192.168.70.201
[]192.168.50.237
[][][2110][2109][2043][2090][2051][2166]192.168.11.201
[2036][2005][2063][2064][2065][2076][2066][2039][2041][2117][2037][2038][2045][2040][2091][2006][2118][2042][2119][2044][][][][][][][][][][2318][1042][][1016][2013][2007][2092]192.168.60.244
[][][][][][][][][][][1001][2168]192.168.205.216
192.168.200.241
192.168.90.203
192.168.206.201
192.168.50.193
192.168.200.239

如您所见,逻辑ID没有移动到下一行。如果一行同时具有逻辑id和IP,我想打印这两行,然后再打印下一行。如果它只有一个或另一个,打印它的任何一个,并移动到下一行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-14 13:20:54

您可以在其中添加一个小逻辑,以检查它是否找到了逻辑ID和/或IP。

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

new_file = input("What is the camera model? **Use Exact Casing and Symbols**")
file_path = "C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\filter_results\\"
end_path = file_path + new_file + ".txt"
print(end_path)

output_txt_file = open(end_path, 'w')
with open("C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\" + new_file + "_filter.csv", "r") as fid:
    print(fid)
    input_file = csv.reader(fid)
    for row in input_file:
        if len(row) >= 4:
            if row[0] == 'File name':
                # skip the header row
                continue

            # Check for Logical ID
            logicalID_match = re.match(r'.*Logical ID:(\d*)', row[3])
            
            # Check for IP
            ip_match = re.match(r'.*(.* [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})', row[3])
            
            if logicalID_match:
                logicalID_str = logicalID_match.group(1).strip()
            else:
                logicalID_str = ''
                    
            if ip_match:
                ip_str = ip_match.group(1).strip()
            else:
                ip_str = ''
                
            outputStr = ' '.join([logicalID_str,ip_str]).strip()
            
            if outputStr != '':
                output_txt_file.write(outputStr + '\n')

output_txt_file.close()            
票数 1
EN

Stack Overflow用户

发布于 2021-12-13 21:44:19

看起来,您提供的CSV中的每一行都有逻辑ID或IP地址,而不是两者都有(也就是说,包含Logical ID:的每一行都没有IP地址,反之亦然)。

由于没有任何一行同时具有逻辑id和IP,所以每次向文本文件添加值时,似乎都可以添加一个\n

如果我在某种程度上误解了你,请相应地修改你的问题。谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70340484

复制
相关文章

相似问题

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