2016-11-17 9 views
1

私は私が顧客IDとPythonでの受注の彼らの合計数を報告Pythonプログラムを作成するにはどうすればよい抽出顧客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の組み込み関数(startswithなど)を使用して抽出し、別のリストに保存することができます。

+5

あなたを教えてくださいあなたが書いたコードを実際に表示し、コード内のどこに問題があるのか​​を明示的に示して、問題を解決します。あなたが試みたものから、あなたのエラー/問題はどこですか?現在のコードから何らかの出力を得ている場合は、現在のコードを表示して、それを*表示する必要があるかどうかを指定します。 – idjaw

+2

@ idjawあなたのコメントを私のAutoReviewComments銀行に保存してもいいですか? –

+0

@leaf sure!先に進む: – 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

ログファイルのログについてのアドバイスとコードをお寄せいただきありがとうございます。 "01-01-2012 01:13:36 somedata:Customerid:1234 somedata orders:4 date" –

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

ログファイルのログに関するアドバイスとコードのおかげで、以下のような日付で始まります。 "01-01-2012 01:13:36 somedata:Customerid:1234 somedata orders:4 date" –

+0

あなたのニーズに合わせてスクリプトを編集しました –

関連する問題