Как я могу использовать Python, чтобы изменить разделитель файла CSV, а также очистить поля нового разделителя? - PullRequest
0 голосов
/ 01 ноября 2018

Я получаю отформатированный CSV-файл с двойными кавычками вокруг текстовых полей, которые содержат запятые.

Увы, мне нужно загрузить его в SQL Server, который, насколько я понял (расскажите, пожалуйста, в чем я здесь не прав), не может обрабатывать заключенные в кавычки поля, содержащие разделитель.

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

Вот код, который я должен сделать:

import csv
import sys

source_file=sys.argv[1]
good_file=sys.argv[2]
bad_file=sys.argv[3]

with open(source_file, 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)

    with open(good_file, 'w') as new_file:
            csv_writer = csv.DictWriter(new_file, csv_reader.fieldnames, delimiter='|')
            headers = dict( (n,n) for n in csv_reader.fieldnames)
            csv_writer.writerow(headers)
            for line in csv_reader:
                    csv_writer.writerow(str.replace(line, '|', ' '))

Как я могу увеличить его, чтобы сделать b?

ps - я использую python 2.6, IIRC.

1 Ответ

0 голосов
/ 06 ноября 2018

SQL Server может загрузить тип файла, который вы описываете. Этот файл, безусловно, может быть загружен с пакетом служб SSIS, а также с помощью утилиты SQL Server bcp. Написание скрипта на python не будет подходящим способом (внедрить другую технологию в микс, когда она не нужна ... просто imho). SQL Server способен точно выполнять то, что вы хотите сделать.

ssis довольно прост. Для BCP вам не нужно использовать опцию -t (чтобы указать терминатор поля для всего файла), а вместо этого использовать файл формата. Используя формат файла, вы можете настроить каждый разделитель полей. Для полей, указанных в кавычках, вы захотите использовать пользовательский разделитель. См. Этот пост или другие подобные статьи, в которых подробно описано, как использовать BCP и файлы с разделителями и полями в кавычках, чтобы скрыть разделители, которые могут появляться в данных.

SQL Server BCP Export, где запятая в поле SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...