2016-08-08 12 views
-1

ユーザー名と日付に従って解析する必要がある数百のテキストファイルがあります。私はそのようなリストにテキストファイルに有用なデータを入れてみました:ネストリストのソートとグループ化クラスオブジェクトの構成

[ 
     ['[email protected]', '34209809' '1434546354', '2016-07-18 00:20:58'], 
     ['[email protected]', '234534345', '09402380',, '2016-07-18 00:20:03'], 
     ['[email protected]', '345315531','1098098098', '2016-07-18 02:40:00'], 
     ['[email protected]', '345431353', '231200023', '2016-07-18 15:45:49'], 
     ['[email protected]', '23232424', '234809809', '2016-07-18 20:45:40'] 
    ] 

出力は以下のようになりますので、しかし、私はユーザ名によって日時およびグループに応じてそれらを並べ替えしたいと思います:

[ 
    ['[email protected]', '23232424', '234809809', '2016-07-18 20:45:40'], 
    ['[email protected]', '34209809' '1434546354', '2016-07-18 00:20:58'], 
    ['[email protected]', '345431353', '231200023', '2016-07-18 15:45:49'], 
    ['[email protected]', '234534345', '09402380',, '2016-07-18 00:20:03'], 
    ['[email protected]', '345315531','1098098098', '2016-07-18 02:40:00'] 
    ] 

import glob 
    from operator import itemgetter 
    from itertools import groupby 
    def read_large_file(filename): 
     matrix=[] 
     global username 
     username=[] 
     for myfile in glob.glob(filename): 
      infile = open(myfile, "r") 
      for row in infile: 
       row=row.strip() 
       array=row.split(';') 
       username.append(array[9]) 
       matrix.append(cdr(array[9],array[17],array[18],array[8])) 

     return matrix 


    class cdr(object):    
     def__init__(self,username,total_seconds_since_start,download_bytes,date_time): 
      self.username=username 
      self.total_seconds_since_start=total_seconds_since_start 
      self.download_bytes=download_bytes 
      self.date_time=date_time 


    def GroupByUsername(matrix): 
     new_matrix=[] 
     new_matrix=groupby(matrix, itemgetter(0)) 
     return new_matrix 

    matrix=read_large_file('C:\Users\ceren\.spyder2/test/*') 
    matrix_new=GroupByUsername(matrix) 

が、私は、このリンクでソリューションを使用しようとしました:: ここに

が私のコードであるSorting and Grouping Nested Lists in Pythonは、しかし、私はこれらのエラーを持っている:

'cdr' object does not support indexing 
    'cdr' object is not iterable 

答えて

2

おそらく単純なPython組み込みソートを使うことができます。

sorted_list = sorted(data, key=lambda user_info: (user_info[0], user_info[3])) 

ラムダキーは、リストの並べ替え方法(昇順)をPythonに指示します。 dataの各エントリについては、user_infoが4つの属性のリストになります。したがって、user_info[0]が電子メールになり、user_info[3]がdatetimeになります。

+0

ありがとう、私はこのエラーが発生しました:TypeError:()は正確に1つの引数(2与えられます)を受け取ります – CerenH

+0

ああ、申し訳ありません、私は 'key ='を忘れました。私はそれを修正しました - それを試してみてください:) – Karin

+0

まだ:TypeError: 'cdr'オブジェクトは、インデックスをサポートしていません、私はPythonはリストのインデックスにクラスのオブジェクトを置くことはできないと思う。 – CerenH

関連する問題