0

如果这个问题有点基本,或者我在其他地方错过了答案,我很抱歉,但请同情一个迷路和困惑的初学者,如果可以的话,请帮帮我。我有很多长文件,其中包含“日期时间 id 编号随机废话”行,我正在尝试计算某些数字与某些 id 一起出现的次数。据我所知,一切都是正确的,除了我只返回一个数字,而不是数百个。我真的把它减少到可能出错的部分。可能有数百种更快更简单的方法来做我想做的事情,但我还不知道它们。请务必告诉我!我有一个来自文件的数据列表,称为数据,以及文件中存在的 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)并忽略其他事物。这意味着如果您可以将每个字符串解析为该元组,则可以将其添加到 Counter 中,如下所示:

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 回答