Вопрос

У меня есть функция экспорта, которая считывает данные из базы данных (целые записи) и записывает их в текстовый файл, по одной записи в строке, каждое поле разделяется символом ';'.проблема, с которой я сталкиваюсь, заключается в том, что некоторые поля содержат CRLFS, и когда я записываю их в файл, он переходит к следующей строке, тем самым разрушая структуру файла.

Единственное решение - заменить CRLFS пользовательским значением, а при импорте заменить обратно на CRLF.но мне не нравится это решение, потому что эти файлы огромны, а операция замены снижает производительность....

У вас есть еще какие-нибудь идеи?

Спасибо!

Это было полезно?

Решение

Да, используйте генератор CSV, который заключает в кавычки строковые значения.Например, Python's 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