Как написать в CSV используя библиотеку журналов Python? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь использовать библиотеку журналов в Python для записи списков строк в файл журнала CSV

Создание логгера:

export_logger = logging.getLogger('exportLogger')
export_logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('export_log.csv',mode='w')
export_logger.addHandler(file_handler)
export_logger.info(",".join(['status', 'view', 'filename', 'stdout', 'stderr', 'time']))

Регистрация:

column_list = [status, view, filename, out, err, current_time]
message = ",".join([str(item) for item in column_list])
export_logger.info(message)

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

Есть ли способ легко санировать строки для записи в CSV? Я мог бы сделать это: Как записать данные в формате csv в виде строки (не файла)? Но это кажется очень окольным и нечитаемым.

Я использую библиотеку журналов только потому, что считал это наилучшей практикой, но если она не справляется с форматированием CSV, я могу также просто открыть файл CSV уровня модуля и записать в него строки, используя библиотеку Python CSV, право

1 Ответ

0 голосов
/ 31 октября 2018

библиотека logging в основном предназначена для выполнения adhoc во время выполнения / диагностики / отладки

предполагаемый / ожидаемый вывод (который, как вам кажется, нужен) должен обрабатываться более напрямую - в вашем случае я бы предложил открыть файл вывода, заключив его в csv.writer и затем вызывая writerow при необходимости.

например:

import csv

output = csv.writer(open('export_log.csv', 'w'))
output.writerow(['status', 'view', 'filename', 'stdout', 'stderr', 'time'])

for foo in bar:
   # do work
   output.writerow([status, view, filename, out, err, current_time])

обратите внимание, что File объекты также являются "менеджерами контекста", и, следовательно, может иметь смысл сделать:

with open('export_log.csv', 'w') as fd:
  output = csv.writer(fd)
  …

если вы хотите убедиться, что файл закрывается соответствующим образом

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