我正在编写一个脚本,从CSV文件中提取信息并将其粘贴到.txt文件中。在我提取该文本之后,通过一个脚本运行txt文件,该脚本应该删除所有重复的文本。每一行数据都有很多信息。每一行都应该有一个IP地址和一个逻辑is。下面是我的csv文件的示例。
"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中:
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文件的一个示例:
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,我想打印这两行,然后再打印下一行。如果它只有一个或另一个,打印它的任何一个,并移动到下一行。
发布于 2021-12-14 13:20:54
您可以在其中添加一个小逻辑,以检查它是否找到了逻辑ID和/或IP。
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()
发布于 2021-12-13 21:44:19
看起来,您提供的CSV中的每一行都有逻辑ID或IP地址,而不是两者都有(也就是说,包含Logical ID:
的每一行都没有IP地址,反之亦然)。
由于没有任何一行同时具有逻辑id和IP,所以每次向文本文件添加值时,似乎都可以添加一个\n
。
如果我在某种程度上误解了你,请相应地修改你的问题。谢谢!
https://stackoverflow.com/questions/70340484
复制相似问题