2010-07-28 4 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']} 

    ... 
    ... 

disons drug_input = 'METHADONE'python: boucle compliquée par la liste

je dois pouvoir passer par le b array et supprimer toutes les lignes qui ne possède pas un de ces:

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

par exemple si b[1] = "yes,no,yes,amidon,blah" alors ne rien faire

mais

si b[2] = "yes,yes,yes,vicodin,yes" puis supprimer cet enregistrement

Répondre

1

Je ne l'ai pas lu vraiment votre paragraphe code, mais du problème que vous avez décrit ensuite il semble que vous voulez:

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

Notez que dans 3.x 'filtre () 'ne retourne pas une liste, mais un objet itérable spécial de type' filter'. – Constantin

+1

Peu importe. De toutes les questions que le PO a posté dans les dernières 24 heures, il est très clair qu'il/elle utilise 2 et pas 3. – chimeracoder

+0

@thebackhand C'est une bonne note cependant; cette réponse n'est pas seulement pour l'OP, c'est pour tout le monde qui rencontre ce problème et cherche une solution ici –