2016-11-17 68 views
1

我有日誌文件像提取客戶ID和他們的訂單總額

"01-01-2012 01:13:36 sometext date customerid:1768 orders:3 apples" 
"01-09-2013 01:18:34 sometext date customerid:1567678 orders:4 oranges" 
"08-10-2000 08:08:28 sometext date customerid:156 orders:5 grapes" 

如何創建該報告的客戶ID,並在Python他們的訂單總數Python程序。感謝您的幫助

注意:我能夠使用python內置函數(startswith等)提取客戶ID和訂單,並保存在不同的列表中,我堅持用客戶ID和他們的總訂單生成報告。

+5

請說明您通過實際顯示您編寫的代碼來實現困難,並明確指出您的代碼在哪裏存在困難。從你的嘗試中,你的錯誤/問題在哪裏?如果您從當前代碼獲得某種輸出,請顯示它當前的樣子,然後指出它應該*的樣子。 – idjaw

+2

@idjaw請記住,如果我將您的評論保存到我的AutoReviewComments銀行? –

+0

@葉肯定!繼續:) – idjaw

回答

0
import re 
rex = re.compile("sometext date customer:(\d+) orders;(\d+)") 
output = [] 
for data in logs: 
    b = rex.search(data) 
    output.append({"customer_id":b.group(1), "orders": b.group(2)}) 

print output 

日誌從日誌文件中的數據(打開文件和readlines方法來讀取文件中的數據)

+0

這是行不通的,這是因爲'sometext date'部分在這裏只是一個佔位符,並且會在每行中填充適當的值,這當然不應該是相同的。所以你可能會發現一個更符合輸入的通用表達式。 –

+0

非常感謝您的建議和code.how關於在日誌文件中的日誌開始日期如下 「01-01-2012 01:13:36 somedata:customerid:1234 somedata orders:4 date」please help –

0
data = {} 
with open('log.txt', 'r') as f: 
    for line in f: 
     id_user = [int(s) for s in line.split() if s.isdigit()][0] # this basically means to use the first digit in the line as the user id. 
     if not id_user in data: 
      data[id_user] = [] 
     data[id_user].append(line) 

for id_user, lines in data.items(): 
    print(id_user, len(lines)) 

EDITED以下OP評論:

data = {} 
with open('log.txt', 'r') as f: 
    for line in f: 
     customer_id = [s for s in f.split() if s.find('customerid') != -1][0].split(':')[1] 
     if not customer_id in data: 
      data[customer_id] = [] 
     data[customer_id].append(line) 

for customer_id, lines in data.items(): 
    print(customer_id, len(lines)) 
+0

非常感謝您的建議和code.how有關在日誌文件中的日誌開始日期如下 「01-01-2012 01:13:36 somedata:customerid:1234 somedata orders:4 date」please help –

+0

我編輯了我的腳本以滿足您的需求 –

相關問題