0

Python CSVリーダーを使用して「疑似CSV」ファイルを解析しようとしていますが、追加のロジックを追加する方法について疑問があります。これを「疑似 CSV」ファイルと呼ぶ理由は、入力ファイルの一部の行に、実際の CSV データが始まる前にテキスト (30 ~ 40 文字) があるためです。このテキストを削除する最善の方法を見つけようとしています。

現在、上記のテキストを削除するための 3 つのオプションを見つけました。

  1. Python から、grep と sed を呼び出し、出力を一時ファイルにパイプして、csv リーダーに渡すことができます (うーん、このオプションは避けたいと思います)。

  2. CSV 方言を作成して不要なテキストを削除します (このオプションは間違っているように感じます)

  3. File オブジェクトを拡張し、必要に応じて不要なテキストを削除する next() 関数を実装します。

入力ファイルの生成方法を制御できないため、生成を変更するオプションはありません。

入力ファイルの問題に気付いたときに持っていた関連コードを次に示します。

with open('myFile', 'r') as csvfile:
theReader = csv.reader(csvfile)
for row in theReader:
     # my logic here

with open()上記のオプション 3 を使用する場合、ソリューションは非常に単純ですが、構文を組み込むことはできません。

それで、ここに私の質問があります(実際には2):オプション3はこの問題を解決する最良の方法ですか?もしそうなら、どうすればそれをwith open()構文に組み込むことができますか?

編集:LinuxでPython 2.7を使用していることを忘れていました。

4

2 に答える 2

4

csv.readerファイル以外の任意の反復可能ファイルを受け入れます。

with open('myFile', 'rb') as csvfile:
     reader = csv.reader(filter_line(line) for line in csvfile)
     for row in reader:
         # my logic here
于 2012-09-24T17:23:30.820 に答える
0

contextlibを使用して、独自のコンテキストマネージャーを作成できます。

from contextlib import contextmanager

@contextmanager
def csv_factory(filename, mode="r"):
    # setup here
    fileobj = open(filename, mode)
    reader = mycsv.reader(fileobj)
    try:
        yield reader # return value for usage in with 
    finally:
        fileobj.close() # clean up here


with csv_factory("myFile") as csvfile:
    for line in csvfile:
        print(line)
于 2012-09-24T17:18:54.950 に答える