2013-04-26 60 views
1

我現在正在爲一個項目編寫一些代碼,其基本思想是逐行讀取文件中的內容並記錄下每個數值都包含在內。對於未來的分析,重要的是要了解每條線上有多少值以及每條線出現的頻率,因此我不能將該文件視爲「數字包」並只計算其總數。使用python生成一個字符串中包含的數值的索引

我最初的想法是生成一個空列表,並且對於每個遠處的列表中的數字索引(數字10將在valueList [10]等等),然後爲該值的每個事件增加該位置的值「10」。我很容易就可以在線計數器上捕獲這些信息,並且還可以逐行給出數據。

我(顯然)是Python的新手。我熟悉其他語言,但以前主要完成嵌入式編程,所以我對高級函數不熟悉等等。有沒有比我所描述的「最佳實踐」或更可靠的方法來做到這一點?

乾杯, 將

+0

我檢查數字的格式如下:116 104 105 115 32 109 97 107 101 115 32 105 116 32 111 102 102 105 99 105 97 108 44 32 119 104 105 99 104 32 105 115 32 115 111 32 103 114 101 97 116 46 32 10這是一條線......線是不同的長度取決於微控制器輸出到日誌文件的內容 – willanth 2013-04-26 11:03:32

回答

1

字典會更加適合這裏,使用collections.Counter()。使用list不是一個好主意,因爲您可能不知道文本文件中存在多少個唯一的數字,並且如果數字丟失,可能會導致稀疏列表。

例子:

In [16]: text="""1      
2 
3 
4 
5 
5 
1 
2 
5 
3""" 

In [17]: from collections import Counter 

In [18]: c=Counter()  

In [19]: for num in text.splitlines():  
    c[num]+=1 
    ....:  

In [20]: c 
Out[20]: Counter({'5': 3, '1': 2, '3': 2, '2': 2, '4': 1}) 
+0

'c = Counter(text.splitlines())' – eumiro 2013-04-26 09:30:17

0

這將是更易於使用的字典不是一個列表...

def inc_count(d, number): 
    try: 
     d[number] += 1 
    except KeyError: 
     d[number] = 1 

def dump_counts(d): 
    for k in sorted(d): 
     print 'Number %d occurred %d times' % (k, d[k]) 

>>> d = {} 
>>> inc_count(d, 10) 
>>> inc_count(d, 10) 
>>> inc_count(d, 11) 
>>> dump_counts(d) 
Number 10 occurred 2 times 
Number 11 occurred 1 times 
+0

我正在做這個建議工作的過程中,因爲當我使用text.split()分割字符串以獲取數字字符串的單個字符時,它們將出現字符串而不是整數。但在最初的測試中,這似乎是迄今爲止最好的解決方案。非常感謝你的幫助。 – willanth 2013-04-26 12:37:05

相關問題