从文件读取时避免相同的数据
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
Desired/expected 输出:
只需要像这样只显示两个IP地址及其使用量之和
192.168.42.12 1025(sample)
192.168.42.2 540(sample)
任何帮助!提前致谢!
使用字典存储对应ips的累计和:
您可以将 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:\temp1.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
您可以创建一个新的辅助函数来获取输出和 returns 独特的项目及其相应的总和:
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]
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
Desired/expected 输出:
只需要像这样只显示两个IP地址及其使用量之和
192.168.42.12 1025(sample)
192.168.42.2 540(sample)
任何帮助!提前致谢!
使用字典存储对应ips的累计和:
您可以将 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:\temp1.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
您可以创建一个新的辅助函数来获取输出和 returns 独特的项目及其相应的总和:
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]