2013-08-07 31 views
1

讀/寫,我想讀一個CSV文件,並重新編譯使用:CSV使用正則表達式應用re.sub

re.sub('\s+(STREET|ST|TRAIL|TRL|TR)\s*$', '', test_file, flags=re.M) 

我越來越:

TypeError: expected string or buffer 

使用:

import csv 
reader = csv.reader(open("some.csv", "rb")) 
for row in reader: 
    print row 

import csv 
writer = csv.writer(open("some.csv", "wb")) 
writer.writerows(someiterable) 

看起來像我需要的功能。任何人有一些sugestions?

+0

當你運行代碼的第一位或者代碼的最後一位時,你是否收到錯誤?是第一批代碼運行,還是你的程序還沒有得到,甚至當最後一段代碼都存在時,你仍然得到這個錯誤?如果您的第一個代碼*運行,請顯示發生的最後一個代碼中的哪一點。 –

回答

0

您必須將字符串傳遞給re.sub()第三個參數,該參數可以是您的reader對象的一行。你已經可以通過writer這個迭代器來做替換:

import csv 
reader = csv.reader(open("input.csv", "rb")) 
writer = csv.writer(open("output.csv", "wb")) 
test = '\s+(STREET|ST|TRAIL|TRL|TR)\s*$' 
writer.writerows((re.sub(test, '', line[0], flags=re.M) for line in reader)) 
+0

我的re模塊返回:_compile(模式,標誌).sub(repl,字符串,計數)我仍然geting期望的字符串或緩衝區TypeError。 – George

+0

嘗試刪除'flag = re.M' –

+0

仍然一樣。 test = str('\ s +(STREET | ST | TRAIL | TRL | TR)\ s * $')也不起作用。 – George