「a+r+b」ファイル モードで何をしていて、同じファイルの読み取りと書き込みを行っているのかわからないため、完全なコード スニペットは提供しませんが、次の行をスキップする簡単な方法を次に示します。読み取っているファイルが最後、最初、または途中にあるかどうかに関係なく、読み取り中のファイルに NUL バイトが含まれています。
トリックは、ドキュメントがcsvfile引数を「イテレータプロトコルをサポートし、メソッドが呼び出されるたびに文字列を返すcsv.writer()
任意のオブジェクトにすることができる」と言っていることを認識することです。これは、呼び出しのファイル引数を、次のように定義された単純なフィルター反復子関数に置き換えることができることを意味します。next()
def filter_nul_byte_lines(a_file):
for line in a_file:
if '\x00' not in line:
yield line
これを次のように使用します。
dcsv = open('Pnl.csv', 'rb+')
cReader = csv.reader(filter_nul_byte_lines(dcsv))
for row in cReader:
print row
これにより、ファイルの読み取り中に NUL バイトを含むすべての行が無視されます。また、この手法は各行が読み取られるときにオンザフライで機能するため、ファイル全体を一度にメモリに読み取ったり、事前に前処理したりする必要はありません。