2009-11-20 46 views
4

我有一個CSV格式的文件,其中分隔符是ASCII單元分隔符^_,行終止符是ASCII記錄分隔符^^(顯然,因爲這些是非打印字符,我剛剛使用了寫在這裏的標準方法之一)。我寫了很多讀取和寫入CSV文件的代碼,所以我的問題不在Python的csv模塊本身。問題在於csv模塊不支持閱讀(但確實支持編寫)除了回車或換行以外的行終止符,至少從我剛剛測試過的Python 2.6開始就是如此。該文檔說這是因爲它是硬編碼的,我認爲它是在模塊底層的C代碼中完成的,因爲我沒有在csv.py文件中看到任何可以更改的東西。使用不同的行終止符在Python中讀取csv文件

有沒有人知道解決這個限制(補丁,另一個CSV模塊等)的方法?我真的需要閱讀一個文件,我不能使用回車符或換行符作爲行結束符,因爲這些字符將出現在某些字段中,並且我希望儘可能避免編寫自己的自定義閱讀器代碼,即使這可以很容易地滿足我的需求。

回答

3

爲什麼不提供自定義迭代到csv.reader函數?這裏是一個天真的實現讀取的CSV的全部內容文件到內存中一次(這可能會或可能不理想,這取決於文件的大小):

def records(path): 
    with open(path) as f: 
     contents = f.read() 
     return (record for record in contents.split('^^')) 

csv.reader(records('input.csv')) 

我認爲應該工作。

+1

是的,雖然這是我試圖避免做的事情。 – 2009-11-20 15:45:46