سؤال

ولدي وظيفة التصدير الذي يقرأ البيانات من DB (سجلات كاملة) ويكتب لهم في ملف txt، سجل واحد على صف كل حقل يتم فصلها بواسطة '؛'. المشكلة أواجه هو أن بعض الحقول تحتوي على CRLFs في ذلك، وعندما يكتب لهم إلى ملف فإنه يذهب إلى السطر التالي وبالتالي تدمير بنية الملف.

والحل الوحيد هو استبدال CRLFs مع قيمة مخصصة، وعند الاستيراد محل الظهر مع CRLF. ولكن أنا لا أحب هذا الحل لهذه الملفات ضخمة واستبدال عملية انخفاض مستوى أداء ....

هل لديك أي أفكار أخرى؟

وشكرا لك!

هل كانت مفيدة؟

المحلول

نعم، استخدم مولد CSV أن يقتبس قيم السلسلة. على سبيل المثال، في بيثون csv حدة.

وعلى سبيل المثال (ممزق وتعديلها من csv مستندات ) :

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

والمخرجات:

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

نصائح أخرى

إذا كان لديك السيطرة على كيفية تصدير ملف والمستوردة، فإنك قد ترغب في النظر في استخدام XML .. كما يمكنك استخدام علامات الاقتباس المزدوجة وأعتقد أن تبين الحرفية مثل "،" في القيم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top