Python continues for loop after exception

advertisements

I'm trying to create a new version of a file that excludes NULL bytes. I'm using the code below to attempt this however it's still breaking on the NULL byte. How should I structure the for statement and try-catch block to keep going after the exception?

import csv

input_file = "/data/train.txt"
outFileName = "/data/train_no_null.txt"
############################

i_f = open( input_file, 'r' )
reader = csv.reader( i_f , delimiter = '|' )

outFile = open(outFileName, 'wb')
mywriter = csv.writer(outFile, delimiter = '|')

i_f.seek( 0 )
i = 1

for line in reader:
    try:
        i += 1
        mywriter.writerow(line)

    except csv.Error:
        print('csv choked on line %s' % (i + 1))
        pass

EDIT:

Here's the error message:

Traceback (most recent call last):
  File "20150310_rewrite_csv_wo_NULL.py", line 26, in <module>
    for line in reader:
_csv.Error: line contains NULL byte

UPDATE:

I'm using this code:

i_f = open( input_file, 'r' )
reader = csv.reader( i_f , delimiter = '|' )
# reader.next()

outFile = open(outFileName, 'wb')
mywriter = csv.writer(outFile, delimiter = '|')

i_f.seek( 0 )
i = 1

for idx, line in enumerate(reader):
    try:
        mywriter.writerow(line)
    except:
        print('csv choked on line %s' % idx)

and now get this error:

Traceback (most recent call last):
  File "20150310_rewrite_csv_wo_NULL.py", line 26, in <module>
    for idx, line in enumerate(reader):
_csv.Error: line contains NULL byte


You can catch all errors with the following code...

for idx, line in enumerate(reader):
    try:
        mywriter.writerow(line)
    except:
        print('csv choked on line %s' % idx)