2009-11-27 6 views
0

J'ai une fonctionnalité d'exportation qui lit les données de DB (enregistrements entiers) et les écrit dans un fichier .txt, un enregistrement sur une ligne chaque champ étant séparé par ';'. le problème auquel je suis confronté est que certains champs contiennent des CRLF et quand je les écris dans le fichier, ils vont à la ligne suivante détruisant ainsi la structure du fichier.empêcher CRLF dans les données d'exportation CSV

La seule solution consiste à remplacer les CRLF par une valeur personnalisée et, lors de l'importation, de les remplacer par CRLF. mais je n'aime pas cette solution parce que ces fichiers sont énormes et l'opération de remplacement diminue les performances ....

Avez-vous d'autres idées?

merci!

Répondre

1

Oui, utilisez un générateur CSV qui évalue des valeurs de chaîne. Par exemple, le module csv de Python.

Par exemple (déchiré et modifié à partir du csvdocs):

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') 

Sorties:

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

bonne idée ... merci! – GeoXYZ

0

Si vous avez le contrôle sur la façon dont le fichier est exporté et importé, vous voudrez peut-être envisager d'utiliser XML .. aussi, vous pouvez utiliser des guillemets doubles je crois pour indiquer des littéraux comme "," dans les valeurs.

Questions connexes