0

この質問が少し基本的なものであるか、他の場所で答えを逃した場合は申し訳ありませんが、道に迷って混乱している初心者を気の毒に思い、できれば手を差し伸べてください. 「date time id number random crap」の行で構成される長いファイルが大量にあり、特定の数字が特定の ID と並んで出現する回数を数えようとしています。私が知る限り、数百ではなく 1 つの数字しか返されないことを除いて、すべてが正しいです。私は本当にこれを、うまくいかないかもしれないビットだけに切り詰めました. 私がやろうとしていることを実行するためのより迅速で簡単な方法はおそらく何百もありますが、まだ知りません。教えてください!データと呼ばれるファイルからのデータのリストと、ファイルに存在するIDのリストがあります。

#get date(data[i][0]), time(data[i][1]), number(data[i][3]), id(data[i][4]) from original data if a certain id (found in listofids) is present, and write into new list
data0=[]
data1=[]
etc
values=[data[i][0], data[i][1], data[i][3], data[i][4]]
for line in data:
    if listofids[0] in line:
        data0.append(values)
    if listofids[1] in line:
        data1.append(values)
    etc

#put number into list h if it occurs in list data0
h=[]
r=range (0, len(data0))
for i in r:
    number=data0[i][3]
    if number not in h:
        h.append(number)
print (len(h))
print (h)

#count the time each element in list h occurs in list data0
print (data0.count(h[0]), data0.count(h[1]), data0.count(h[2]))

これが少しごちゃごちゃしていて紛らわしい場合は申し訳ありません。また、本当に簡単なことが抜けている場合は特に申し訳ありません。

助けてくれてありがとう!

4

2 に答える 2

1

入力がどのように表示され、どのような結果が得られるかの具体的な例がないとわかりにくいですがcollections.Counter、役立つ可能性が非常に高くなります。知りたいことのイテラブルをフィードすると、そこにある一意の値と、それぞれが何回出現するかがわかります。

文字列の形式は :で、日付と数字の出現回数をカウントすることに関心があるとします - のペアをカウントし、他のものは無視しdate time id number stuffたいようです。(id, number)つまり、各文字列をそのタプルだけに解析できる場合は、次のようにカウンターに追加できます。

count = collections.Counter()
for string in file:
   tup = # parse string into `(id, number)` tuple
   count.update([count])

または、より簡潔に:

count = collections.Counter(tupleify(string) for string in file)

count[(id, number)](id, number)次に、特定のペアがファイルに何回出現したかを示します。

于 2012-06-14T13:37:46.113 に答える
0

それらはすべて、元のファイルの「07/11/2008 09:00:06 word #0F 0006E7895B word word」です

その固定形式の解析は非常に簡単です。次のスニペットでは、(ID, number) の組み合わせをカウントすることを想定しています。

from collections import defaultdict

# Count numbers in a dictionary that defaults to zero if a key does not exist yet
counter = defaultdict(int)

with open("filename", "rU") as f:
    for line in f:
        info = line.split()
        date, time, unused, number, id = info[:5]
        counter[id, number] += 1

for (id, number), count in counter.items():
    print("The combination id=%s, number=%s occurred %d times" % (id, number, count))
于 2012-06-14T15:41:14.447 に答える