2010-07-28 3 views
0
import csv 
import collections 

def do_work(): 
    (data,counter)=get_file('thefile.csv') 
    b=samples_subset1(data,counter,'/pythonwork/samples_subset4.csv',500) 
    medications_subset2(b,['HYDROCODONE','MORPHINE','OXYCODONE']) 

def get_file(start_file): 
    with open(start_file,'rb') as f: 
    data=list(csv.reader(f)) 
    counter=collections.defaultdict(int) 

    for row in data: 
     counter[row[10]]+=1 
    return (data,counter) 

def samples_subset1(data,counter,output_file,sample_cutoff): 
    with open(output_file,'wb') as outfile: 
    writer=csv.writer(outfile) 
    b_counter=0 
    b=[] 
    for row in data: 
     if counter[row[10]]>=sample_cutoff: 
     b.append(row) 
     writer.writerow(row) 
     b_counter+=1 
    return b 

def medications_subset2(b,drug_input): 

    brand_names={'MORPHINE':['ASTRAMORPH','AVINZA','CONTIN','DURAMORPH','INFUMORPH', 
        'KADIAN','MS CONTIN','MSER','MSIR','ORAMORPH', 
        'ORAMORPH SR','ROXANOL','ROXANOL 100'], 
     'OXYCODONE':['COMBUNOX','DIHYDRONE','DINARCON','ENDOCET','ENDODAN', 
         'EUBINE','EUCODAL','EUKODAL','EUTAGEN','OXYCODONE WITH ACETAMINOPHEN CAPSULES', 
         'OXYCODONE WITH ASPIRIN,','OXYCONTIN','OXYDOSE','OXYFAST','OXYIR', 
         'PANCODINE','PERCOCET','PERCODAN','PROLADONE','ROXICET', 
         'ROXICODONE','ROXIPRIM','ROXIPRIN','TECODIN','TEKODIN', 
         'THECODIN','THEKOKIN','TYLOX'], 
     'OXYMORPHONE':['NUMORPHAN','OPANA','OPANA ER'], 
     'METHADONE':['ALGIDON','ALGOLYSIN','AMIDON','DEPRIDOL','DOLOPHINE','FENADONE', 
         'METHADOSE','MIADONE','PHENADONE'], 
     'BUPRENORPHINE':['BUPRENEX','LEPTAN','SUBOXONE','SUBUTEX','TEMGESIC'], 
     'HYDROMORPHONE':['DILAUDID','HYDAL','HYDROMORFAN','HYDROMORPHAN','HYDROSTAT', 
          'HYMORPHAN','LAUDICON','NOVOLAUDON','OPIDOL','PALLADONE', 
          'PALLADONE IR','PALLADONE SR'], 
     'CODEINE':['ACETAMINOPHEN WITH CODEINE','ASPIRIN WITH CODEINE','EMPIRIN WITH CODEINE', 
        'FLORINAL WITH CODEINE','TYLENOL 3','TYLENOL 4','TYLENOL 5'] 
     'HYDROCODONE':['ANEXSIA','BEKADID','CO-GESIC','CODAL-DH','CODICLEAR-DH', 
         'CODIMAL-DH','CODINOVO','CONATUSSIN-DC','CYNDAL-HD','CYTUSS-HC', 
         'DETUSSIN','DICODID','DUODIN','DURATUSS-HD','ENDAL-HC','ENTUSS', 
         'ENTUSS-D','G-TUSS','HISTINEX-D','HISTINEX-HC','HISTUSSIN-D','HISTUSSIN-HC', 
         'HYCET','HYCODAN','HYCOMINE','HYDROCODONE/APAP','HYDROKON', 
         'HYDROMET','HYDROVO','KOLIKODOL','LORCET','LORTAB', 
         'MERCODINONE','NOROCO','NORGAN','NOVAHISTEX','ORTHOXYCOL', 
         'POLYGESIC','STAGESIC','SYMTAN','SYNKONIN','TUSSIONEX','VICODIN', 
         'VICOPROFEN','XODOL','ZYDONE']} 

    ... 
    ... 

скажем drug_input = 'METHADONE'питон: сложный цикл по списку

я должен быть в состоянии пройти через б array и удалить все строки, которые не имеют какого-либо одного из них:

['ALGIDON','ALGOLYSIN','AMIDON','DEPRIDOL','DOLOPHINE','FENADONE', 
         'METHADOSE','MIADONE','PHENADONE'] 

например, если b[1] = "yes,no,yes,amidon,blah" затем ничего не делать

но

если b[2] = "yes,yes,yes,vicodin,yes" затем удалить эту запись

ответ

1

Я не читал ваш код пункта, но от проблемы, которую вы описали потом это звучит, как вы хотите:

needed = set(['ALGIDON','ALGOLYSIN','AMIDON','DEPRIDOL','DOLOPHINE','FENADONE', 'METHADOSE','MIADONE','PHENADONE']) 
b = filter(lambda s: len(set(s.upper().split(',')) & needed) > 0, b) 
+1

Обратите внимание, что в 3.x 'фильтр () 'не возвращает список, а специальный итерируемый объект типа' filter'. – Constantin

+1

Неважно. Из всех вопросов, которые OP выложил в последний раз - 24 часа, очень ясно, что он использует 2, а не 3. – chimeracoder

+0

@thebackhand Это хорошая заметка; этот ответ не только для OP, это для всех, кто сталкивается с этой проблемой и ищет решение здесь –

Смежные вопросы