我有這樣解析記錄與蟒蛇鍵值對
2017年7月24日18數以百萬計的記錄的文件:34:23 | CN:SSL | RESPONSETIME:23 | BYTESIZE:1456 | CLIENTIP: 127.0.0.9 | PROTOCOL:SSL-V1.2
每個記錄包含大約30個帶「|」的鍵值對,分隔符。鍵值對位置不是恆定的。 嘗試使用python字典或列表概念分析這些記錄。 注:第1列不在鍵值格式
我有這樣解析記錄與蟒蛇鍵值對
2017年7月24日18數以百萬計的記錄的文件:34:23 | CN:SSL | RESPONSETIME:23 | BYTESIZE:1456 | CLIENTIP: 127.0.0.9 | PROTOCOL:SSL-V1.2
每個記錄包含大約30個帶「|」的鍵值對,分隔符。鍵值對位置不是恆定的。 嘗試使用python字典或列表概念分析這些記錄。 注:第1列不在鍵值格式
文件基本上是一個|
- 分隔csv
文件保持第一的時間戳,然後通過:
分開2場。
因此,您可以使用csv
模塊讀取單元格,然後將str.split
的結果傳遞給gencomp中的dict
以構建除第一個元素之外的所有元素的字典。
然後用時間戳更新字典:
import csv
list_of_dicts = []
with open("input.txt") as f:
cr = csv.reader(f,delimiter="|")
for row in cr:
d = dict(v.split(":") for v in row[1:])
d["date"] = row[0]
list_of_dicts.append(d)
list_of_dicts
包含像
{'date': '2017-07-24 18:34:23', 'PROTOCOL': 'SSL-V1.2', 'RESPONSETIME': '23', 'CN': 'SSL', 'CLIENTIP': '127.0.0.9', 'BYTESIZE': '1456'}
我在數據中也有幾個包含「:」的鍵。像BACKEND:10.207.161.106:443 ....如此分割失敗給出下面的原因ValueError:字典更新序列元素#30的長度爲4; 2是必需的 –
詞典您重複下面的過程在代碼中的所有行。我不清楚日期時間值。所以我沒有在輸入中加入。你可以根據你的理解來包含它。
import re
given = "CN:SSL|RESPONSETIME:23|BYTESIZE:1456|CLIENTIP:127.0.0.9|PROTOCOL:SSL-
V1.2"
results = dict()
list_for_this_line = re.split('\|',given)
for i in range(len(list_for_this_line)):
separated_k_v = re.split(':',list_for_this_line[i])
results[separated_k_v[0]] = separated_k_v[1]
print results
希望這有助於!
嘗試'csv'模塊... –