2011-09-12 57 views
1

我正在閱讀使用python的CSV文件,並且想要刪除轉義字符('aaa/bb'aaabb)的某些字段,並且對於某些字段不做任何更改。可以在不同的領域使用不​​同的方言嗎?

例如: 輸入:13,0,0,"0",false,"test\\file",-1,-1,1314570610162,13,"1","Danny","name\\Mary"
預期輸出:13,0,0,"0",false,"testfile",-1,-1,1314570610162,13 ,"1","Danny","name\Mary"

這是我使用的代碼:

csv.register_dialect('mydialect', escapechar='\\') 
dialect = csv.get_dialect('mydialect') 
writer = csv.writer(sys.stdout, dialect=dialect) 
writer.writerow 
(
    (
     <row to write> 
    ) 
) 

我可以使用幾種方言在同一行?怎麼樣?另一個想法?

+2

我沒有在這裏看到一個轉義字符。你可以在你想要的轉換之前/之後提供樣品行嗎? –

+2

你如何閱讀CSV。請提供更多背景。 – rumpel

+1

如果您提供更多示例數據來證明問題,可能會有所幫助。 –

回答

1

你在推翻它。你不需要有多個方言,他們描述了csv文件的佈局。你想刪除某些字段中的字符,在編寫輸出之前很容易完成。

像這樣的東西應該是不錯的:

reader = csv.reader(yourFileHandle) 
writer = csv.writer(outputFileHandle) 
for row in reader: 
    row[5] = row[5].replace(r'\','') 
    writer.writerow(row) 
0

如果報價不是QUOTE_NONEdoublequote爲真(默認),則不需要escapechar

>>> import csv, sys 
>>> w = csv.writer(sys.stdout) 
>>> w.writerow([1,'"ab"','c,','d e', 'f', 'g\\']) 
1,"""ab""","c,",d e,f,g\ 
>>> w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONE,escapechar='\\') 
>>> w.writerow([1,'"ab"','c,','d e', 'f', 'g\\']) 
1,\"ab\",c\,,d e,f,g\\ 
>>> w = csv.writer(sys.stdout, doublequote=False,escapechar='\\') 
>>> w.writerow([1,'"ab"','c,','d e', 'f', 'g\\']) 
1,\"ab\","c,",d e,f,"g\"