2010-07-28 32 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'蟒蛇:通過項目太複雜循環

我需要能夠去通過B 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 2010-07-28 19:07:20

+1

不管。從OP在過去24小時內發佈的所有問題中,很清楚他/她正在使用2而不是3. – chimeracoder 2010-07-28 22:14:06

+0

@thebackhand儘管這是一個好消息,這個答案不僅適用於OP,它適用於所有遇到此問題並在此搜索解決方案的人 – 2010-07-28 22:27:07