Pregunta

Tengo una funcionalidad de exportación que lee datos de la base de datos (registros completos) y los escribe en un archivo .txt, un registro en una fila, cada campo está separado por ';'. El problema al que me estoy enfrentando es que algunos campos contienen CRLF y cuando los escribo en el archivo, pasan a la siguiente línea, destruyendo así la estructura del archivo.

La única solución es reemplazar los CRLF con un valor personalizado, y en la importación reemplazar nuevamente con CRLF. pero no me gusta esta solución porque estos archivos son enormes y la operación de reemplazo reduce el rendimiento ...

¿Tienes alguna otra idea?

gracias!

¿Fue útil?

Solución

Sí, use un generador CSV que cita valores de cadena. Por ejemplo, el módulo csv de Python.

Por ejemplo (arrancado y modificado desde csv documentos ):

import csv
def write(filename):
    spamWriter = csv.writer(open(filename, 'w'), quoting=csv.QUOTE_ALL)
    spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam\nbar'])

def read(filename):
    reader = csv.reader(open(filename, "rb"))
    for row in reader:
        print row

write('eggs.csv')
read('eggs.csv')

Salidas:

['Spam', 'Spam', 'Spam', 'Spam', 'Spam', 'Baked Beans']
['Spam', 'Lovely Spam', 'Wonderful Spam\r\nbar']

Otros consejos

Si tiene control sobre cómo se exporta y se importa el archivo, puede considerar el uso de XML. También puede usar comillas dobles que creo que indican literales como ", " en los valores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top