empêcher CRLF dans les données d'exportation CSV
Question
J'ai une fonctionnalité d'exportation qui lit les données de la base de données (enregistrements complets) et les écrit dans un fichier .txt, un enregistrement sur une ligne, chaque champ étant séparé par un ';'. le problème auquel je suis confronté est que certains champs contiennent des CRLF et lorsque je les écrit dans le fichier, il passe à la ligne suivante, détruisant ainsi la structure du fichier.
La seule solution est de 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 car ces fichiers sont énormes et que l'opération de remplacement diminue les performances ....
Avez-vous d'autres idées?
merci!
La solution
Oui, utilisez un générateur CSV qui cite des valeurs de chaîne. Par exemple, le module csv
de Python.
Par exemple (extrait et modifié à partir du csv
docs ):
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']
Autres conseils
Si vous avez le contrôle sur le mode d’exportation et d’importation du fichier, vous pouvez envisager d’utiliser XML. Vous pouvez également utiliser des guillemets doubles pour indiquer des littéraux tels que ", " dans les valeurs.