簡體   English   中英

從文件讀取時避免相同的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM