2017-09-28 84 views
1

我有一個文件,'in.csv',其中有許多條目類似如下:Python的 - 消除正則表達式從CSV文件匹配

[Part 1: A] 
Was hab’ ich nur getan? 
Hab mich selbst nie hinterfragt 
Wer bin ich, wer bin ich, wer bin ich, was bin ich bloß? 
Aaaah - wer bin ich, was bin ich bloß? 
Ging es all die Zeit lang wirklich nur um mich? 
Nur um mich, nur um mich, nur um mich? 
Denk’ ich wirklich immer nur an mich? 
Nur an mich, nur an mich, nur an mich? 

[Part 2: T] 
Ich bin so horrible, horrible, horrible 
Fehler einzusehen ist mir nicht possible, possible, possible 
Jaaah - doch ich denk’ jeden Tag an all den Shit, den ich getan hab’ 
Warum unterschätz’ ich meinen Impact auf die andern? 
Homie, sag mir, warum ficke ich mein Karma 
Und geb kein’ Fick auf alles, was die Stimme in mir labert? 
Blockiert mich da mein Ego oder weiß ich es nicht besser? 
Mann, wann verdammt fühl ich mich bereit etwas zu ändern? 
Warum lass’ ich einfach nichts mehr an mich ran? 
Warum lass’ ich selbst mich selbst nicht an mich ran? 
,1 

(...) 

,我要找到並消除這種模式的所有出現:

match = "[\(\[].*?[\)\]]" 

我想這一點:

with open('in.csv', 'rb') as in_file, open('out.csv', 'wb') as out_file: 
    reader = csv.reader(in_file, delimiter='\t') 
    for item in list(reader): 
     re.sub(match, ' ', item, flags=re.MULTILINE)  
     out_file.write(item) 

,但它無法正常工作。我如何去尋找和消除所有[]

+0

您可以粘貼輸出或運行時看到的錯誤嗎? – ShreyasG

+0

未打印錯誤。但'out_file'保持不變。 – outkast

+0

將讀取器(可迭代)轉換爲列表的目的是什麼?只是問問。 – Paandittya

回答

2

問題是你在做什麼,結果,表達是正確的:

with open('in.csv', 'rb') as in_file, open('out.csv', 'wb') as out_file: 
    reader = csv.reader(in_file, delimiter='\t') 
    for item in list(reader): 
     item = re.sub(match, ' ', item, flags=re.MULTILINE) 
     # ---^---  
     out_file.write(item) 

sub功能不改變原始字符串,而是還給一個新的副本,所以您需要抓住這一點。你甚至可以通過添加錨改善你的表達:

^[\(\[].*?[\)\]] 

它極大地減少所需的步驟(10倍!),看到a demo on regex101.com