0

私はこのファイルを持っています

10, 44.66.44.55 , AD, AC , 112
10, 44.66.54.55 , AD, AC , 112
10, 44.66.44.55 , AD, AC , 112
50, 44.66.64.55 , AD, AC , 112
10, 44.66.54.55 , AD, AC , 112
10, 44.66.44.55 , AD, AC , 112

同じIPアドレスでcolumn1を追加したい。次のような出力が必要です

30, 44.66.44.55 , AD, AC , 112
20, 44.66.54.55 , AD, AC , 112
50, 44.66.64.55 , AD, AC , 112

Pythonでやりたい

私は試した

import re
import collections

a = collections.Counter()
with open("temp.txt", "r") as f:
   for line in f.readlines():
         list = line.split()
     a[list[1]] += int(list[0])
         print list[1]
4

4 に答える 4

1

この場合に理想的な itertools.groupby ソリューションを使用できます。

>>> with open("test.csv") as fin:
    grouped_lines = groupby(sorted((e.split(',') for e in fin), key = itemgetter(1)), key = itemgetter(1))


>>> for k, v in grouped_lines:
    lines = list(v)
    lines[0][0] = sum(int(e[0]) for e in lines)
    print lines[0]


[30, ' 44.66.44.55 ', ' AD', ' AC ', ' 112\n']
[20, ' 44.66.54.55 ', ' AD', ' AC ', ' 112\n']
[50, ' 44.66.64.55 ', ' AD', ' AC ', ' 112\n']
于 2013-01-30T03:47:41.230 に答える
1

,空白ではなく分割する必要があります

これを試して

list = line.split(',')

于 2013-01-30T03:47:53.123 に答える
0

@Abhijitの答えは短いですが、
これを試してみてください。

ファイル データを処理した後、データをディクショナリに格納します。このデータは、必要に応じて操作されます。
あなたのデータは辞書の値です。

all_ips = {}

f = open('Test2.txt')
lines = f.readlines()
f.close()

for line in lines:
    ip = line.split(',')[1]

    props = line.split(',')
    props[0] = int(props[0])

    if ip not in all_ips:
        all_ips[ip] = props
    else:
        all_ips[ip][0] += props[0]

for ip in all_ips:
    print all_ips[ip]
于 2013-01-30T07:25:53.477 に答える
0

モジュールがありcollections.Counterます。http://docs.python.org/2/library/collections.htmlの辞書を返します{'word': numberTimes}

于 2013-01-30T05:22:44.240 に答える