запретить CRLF в данных экспорта CSV
Вопрос
У меня есть функция экспорта, которая считывает данные из базы данных (целые записи) и записывает их в текстовый файл, по одной записи в строке, каждое поле разделяется символом ';'.проблема, с которой я сталкиваюсь, заключается в том, что некоторые поля содержат 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 ... также вы можете использовать двойные кавычки, которые, как я считаю, указывают на литералы, такие как ", " в значениях.