我正在撰寫一個腳本,用于從 CSV 檔案中提取資訊并將其粘貼到 .txt 檔案中。在我通過應該洗掉任何重復項的腳本提取該文本后,運行該 txt 檔案。每行資料都有很多資訊。每一行都應該有一個 IP 地址,并且可能是一個邏輯 ID。這是我的 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 地址并創建一個新行。
我面臨的一個問題是,如果我在 else 陳述句中放入“\n”,它將在一行列印一行的邏輯 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,我想同時列印下一行。如果它只有一個或另一個,列印它并移動到下一行。
uj5u.com熱心網友回復:
您可以在其中添加一些邏輯來檢查它是否找到了邏輯 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()
uj5u.com熱心網友回復:
看起來您提供的 CSV 中的每一行都有一個邏輯 ID 或 IP 地址,從來沒有兩者(即包含的每一行都Logical ID:沒有 IP 地址,反之亦然)。
由于沒有一行同時具有邏輯 ID 和 IP,因此\n每次向文本檔案附加值時似乎都可以添加一個。
如果我以某種方式誤解了您,請相應地編輯您的問題。謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/380615.html
上一篇:Pandas:將資料幀與csv檔案進行比較并更新csv檔案
下一篇:RabinKarp演算法負哈希
