¿Dividir un archivo CSV en partes iguales?

Tengo un archivo CSV grande que me gustaría dividir en un número que sea igual al número de núcleos de CPU en el sistema. Quiero usar multiproceso para que todos los núcleos funcionen juntos en el archivo. Sin embargo, tengo problemas incluso para dividir el archivo en partes. He buscado en todo google y encontré un código de muestra que parece hacer lo que quiero. Esto es lo que tengo hasta ahora:

def split(infilename, num_cpus=multiprocessing.cpu_count()):
    READ_BUFFER = 2**13
    total_file_size = os.path.getsize(infilename)
    print total_file_size
    files = list()
    with open(infilename, 'rb') as infile:
        for i in xrange(num_cpus):
            files.append(tempfile.TemporaryFile())
            this_file_size = 0
            while this_file_size < 1.0 * total_file_size / num_cpus:
                files[-1].write(infile.read(READ_BUFFER))
                this_file_size += READ_BUFFER
        files[-1].write(infile.readline()) # get the possible remainder
        files[-1].seek(0, 0)
    return files

files = split("sample_simple.csv")
print len(files)

for ifile in files:
    reader = csv.reader(ifile)
    for row in reader:
        print row

Las dos impresiones muestran el tamaño de archivo correcto y que se dividió en 4 partes (mi sistema tiene 4 núcleos de CPU).

Sin embargo, la última sección del código que imprime todas las filas en cada una de las piezas da el error:

for row in reader:
_csv.Error: line contains NULL byte

Intenté imprimir las filas sin ejecutar la función de división e imprime todos los valores correctamente. Sospecho que la función de división ha agregado algunos bytes NULOS a las 4 piezas de archivo resultantes, pero no estoy seguro de por qué.

¿Alguien sabe si este es un método correcto y rápido para dividir el archivo? Solo quiero piezas resultantes que csv.reader pueda leer con éxito.

Respuestas a la pregunta(1)

Su respuesta a la pregunta