4

デリミタが ASCII ユニット セパレータ^_で、行ターミネータが ASCII レコード セパレータである CSV 形式のファイルがあります^^(明らかに、これらは印刷されない文字であるため、ここでは標準的な書き込み方法の 1 つを使用しました)。私はCSVファイルを読み書きするコードをたくさん書いたので、私の問題はPythonのcsvモジュール自体にはありません。問題は、csv モジュールがキャリッジ リターンまたはライン フィード以外の行終端文字の読み取りをサポートしていない (ただし、書き込みはサポートしている) ことです。少なくとも、テストしたばかりの Python 2.6 ではそうです。ドキュメントには、これはハードコードされているためであると書かれています。これは、csv.py ファイルに変更できるものがないため、モジュールの基礎となる C コードで行われていることを意味します。

この制限を回避する方法を知っている人はいますか (パッチ、別の CSV モジュールなど)? キャリッジ リターンや改行を改行文字として使用できないファイルを読み込む必要があります。これらの文字は一部のフィールドに表示されるためです。可能であれば、独自のカスタム リーダー コードを記述したくありません。私のニーズを満たすのはかなり簡単ですが。

4

1 に答える 1

3

csv.reader関数にカスタム iterable を提供しないのはなぜですか? これは、CSV ファイルの内容全体を一度にメモリに読み込む単純な実装です (ファイルのサイズによっては、これが望ましい場合とそうでない場合があります)。

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

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

私はそれがうまくいくと思います。

于 2009-11-20T14:58:59.047 に答える