Список Python для вставки в другую таблицу или список - PullRequest
0 голосов
/ 20 марта 2012

У меня есть таблица с повторяющейся датой и полем2 в качестве идентификатора продажи

table_sale

field1      field2  field3                  field4  field5                  
3/16/2012   a       KONDRA I KOMANG         1       TERAPI OZON 60 MENIT    
3/16/2012   b       WARTI NI WAYAN          1       TERAPI OZON 60 MENIT    
3/16/2012   c       MARDIKA I GUSTI PUTU    1       TERAPI OZON 60 MENIT    
3/16/2012   d       DARMIASIH NI KOMANG     1       TERAPI OZON 60 MENIT    
3/19/2012   e       DARMIASIH NI KOMANG     0.5     Orbitalized 240T        
3/19/2012   e       DARMIASIH NI KOMANG     0.5     Octogenarian 240T       
3/19/2012   e       DARMIASIH NI KOMANG     1       TERAPI AKUPUNKTUR       
3/29/2012   f       ARNI NI MADE            3       Lingzhi 60C             
3/29/2012   f       ARNI NI MADE            1       Octogenarian 240T   

Как получить результат или напечатать как это: И сделать это по-питонски?

table_log

field1                  field2                          
KONDRA I KOMANG         ;3/16/2012 (1 TERAPI OZON 60 MENIT)
WARTI NI WAYAN          ;3/16/2012 (1 TERAPI OZON 60 MENIT)
MARDIKA I GUSTI PUTU    ;3/16/2012 (1 TERAPI OZON 60 MENIT)
DARMIASIH NI KOMANG     ;3/16/2012 (1 TERAPI OZON 60 MENIT) ;3/19/2012 (0.5 Orbitalized 240T + 0.5  Octogenarian 240T + 1 TERAPI AKUPUNKTUR)
ARNI NI MADE            ;3/29/2012 (3 Lingzhi 60C + 1 Octogenarian 240T)

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Это проанализирует ваш пример таблицы:

from itertools import groupby
from operator import itemgetter

table = '''\
field1      field2  field3                  field4  field5                  
3/16/2012   a       KONDRA I KOMANG         1       TERAPI OZON 60 MENIT    
3/16/2012   b       WARTI NI WAYAN          1       TERAPI OZON 60 MENIT    
3/16/2012   c       MARDIKA I GUSTI PUTU    1       TERAPI OZON 60 MENIT    
3/16/2012   d       DARMIASIH NI KOMANG     1       TERAPI OZON 60 MENIT    
3/19/2012   e       DARMIASIH NI KOMANG     0.5     Orbitalized 240T        
3/19/2012   e       DARMIASIH NI KOMANG     0.5     Octogenarian 240T       
3/19/2012   e       DARMIASIH NI KOMANG     1       TERAPI AKUPUNKTUR       
3/29/2012   f       ARNI NI MADE            3       Lingzhi 60C             
3/29/2012   f       ARNI NI MADE            1       Octogenarian 240T
'''

# Setup bounds for fields in fixed width table.
fields = (0,12,20,44,52,None)
bounds = zip(fields[:-1],fields[1:])

# Parse the data
data = []
for line in table.splitlines():
    data.append([line[a:b].rstrip() for a,b in bounds])

# Sort the data by field3,field2 for groupby.
data.pop(0) # remove header line
data.sort(key=itemgetter(2,1))

# Output result header
print '{:24}{}'.format('field1','field2')

# Output result lines
for field3,items in groupby(data,key=itemgetter(2)):
    result = []
    for field1,field1_items in groupby(items,key=itemgetter(0)):
        result.append(';{} ({})'.format(field1,' + '.join(' '.join(item[3:]) for item in field1_items)))
    print '{:24}{}'.format(field3,' '.join(result))

Вывод

field1                  field2
ARNI NI MADE            ;3/29/2012 (3 Lingzhi 60C + 1 Octogenarian 240T)
DARMIASIH NI KOMANG     ;3/16/2012 (1 TERAPI OZON 60 MENIT) ;3/19/2012 (0.5 Orbitalized 240T + 0.5 Octogenarian 240T + 1 TERAPI AKUPUNKTUR)
KONDRA I KOMANG         ;3/16/2012 (1 TERAPI OZON 60 MENIT)
MARDIKA I GUSTI PUTU    ;3/16/2012 (1 TERAPI OZON 60 MENIT)
WARTI NI WAYAN          ;3/16/2012 (1 TERAPI OZON 60 MENIT)
0 голосов
/ 20 марта 2012

Как на счет этого - может быть, не самый "питонический".

>>> import csv
>>> rows = csv.reader(open('in.txt','rb'),dialect='excel-tab')
>>> d = dict()
>>> _ = rows.next() # skips header
>>> for row in rows:
...     if row[2] in d.keys():
...         if row[0] in d[row[2]].keys():
...            d[row[2]][row[0]].append('%s %s' % (row[3],row[4].strip()))
...         else:
...            d[row[2]][row[0]] = ['%s %s' % (row[3],row[4].strip())]
...     else:
...          d[row[2]] = {row[0]: ['%s %s' % (row[3],row[4].strip())]}
...
>>>
>>> for k,v in d.iteritems():
...     print k+'\t'+''.join(\
...         [';'+k1.strip()+' ('+' + '.join(v[k1])+')' for k1 in v.keys()]\
...         )
...
ARNI NI MADE    ;3/29/2012 (3 Lingzhi 60C + 1 Octogenarian 240T)
WARTI NI WAYAN  ;3/16/2012 (1 TERAPI OZON 60 MENIT)
KONDRA I KOMANG ;3/16/2012 (1 TERAPI OZON 60 MENIT)
MARDIKA I GUSTI PUTU    ;3/16/2012 (1 TERAPI OZON 60 MENIT)
DARMIASIH NI KOMANG     ;3/19/2012 (0.5 Orbitalized 240T + 0.5 Octogenarian 240T
 + 1 TERAPI AKUPUNKTUR);3/16/2012 (1 TERAPI OZON 60 MENIT)
...