[英]avoid same data when reading from a file
strStr = ["192.168.42.12", "192.168.42.2"]
with open(datausage) as f:
lines = f.readlines()
for line in lines:
for ii in strStr:
if ii in line:
result = line
ip = line[5:-50]
result_ip = ip.replace(" ", "")
usage = line[-8:]
d = usage.replace('KB', '')
usage = d.replace('B', '')
usage = usage.replace('\n', '')
print result_ip + '\t\t\t' + str(usage)
以上代碼的結果:IP使用率
192.168.42.12 151
192.168.42.12 4.95
192.168.42.12 3.25
192.168.42.2 3.73
192.168.42.2 3.73
192.168.42.12 5.36
192.168.42.12 705
192.168.42.12 282
192.168.42.12 225
192.168.42.2 81
192.168.42.2 40
期望/預期輸出:
只需顯示兩個IP地址及其用法之和即可
192.168.42.12 1025(sample)
192.168.42.2 540(sample)
任何幫助! 提前致謝!
使用字典來存儲對應ip的累積和:
您可以將ips存儲為:
result_count = {}
with open(ipfile) as f:
lines = f.readlines()
for line in lines:
ip = line.replace('\n', '').replace(' ', '')
result_count[ip] = 0.0
with open(datausage) as f:
lines = f.readlines()
for line in lines:
for ii in result_count:
if ii in line:
result = line
ip = line[5:-50]
result_ip = ip.replace(" ", "")
usage = line[-8:]
d = usage.replace('KB', '')
usage = d.replace('B', '')
usage = usage.replace('\n', '')
usage = usage.replace(' ', '')
usage = float(usage)
# add the sum to to the related ip
result_count[result_ip] += usage
print result_ip + '\t' + str(usage)
for key, value in result_count.items():
print(key, value)
您可以嘗試此代碼。
datausage = r"e:\temp\111.txt"
strStr = ["192.168.42.12", "192.168.42.2"]
with open(datausage) as f:
lines = f.readlines()
for ii in strStr:
sumResult = 0
for line in lines:
if ii in line:
result = line
ip = line[5:-50]
result_ip = ip.replace(" ", "")
usage = line[-8:]
d = usage.replace('KB', '')
usage = d.replace('B', '')
usage = usage.replace('\n', '')
sumResult += float(usage)
print(result_ip + '\t\t\t' + str(sumResult))
代碼輸出為:
192.168.42.12 318.4
192.168.42.2 14.92
您可以創建一個新的幫助器函數,該函數將輸出並返回具有相應總和的唯一項:
def getunique(data):
newdata = []
uniq = list(set(x[0] for x in data)
for value in uniq:
sum = 0.0
for subvalue in data
sum += data[1]
newdata.append([uniq,sum])
return newdata
此函數假定要獲取其唯一值的項目以以下格式給出:
[[ip, valuetosum],[ip,valuetosum],[ip,valuetosum]...]
因此您可能需要為此調整代碼
這樣的簡單邏輯怎么樣? 這會為您工作@praveen嗎?
out = {}
with open(datausage) as f:
for line in f:
ip, count = line.split()
out[ip] = out.get(ip, 0) + float(count)
for ip in out:
print ip, '\t', out[ip]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.