如何使用Python日志记录库写入CSV?

时间:2018-10-30 19:03:42

标签: python python-3.x csv logging

我正在尝试使用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的字符串?我可以这样做: How do I write data into csv format as string (not file)? 但这似乎非常绕行并且难以理解。

我之所以只使用日志记录库是因为我认为这是最佳做法,但是如果它不能处理CSV格式,我也可以打开一个模块级CSV文件,然后使用python csv库向其中写入行,对吧?

1 个答案:

答案 0 :(得分:1)

logging库主要用于临时运行时/诊断/调试输出

预期/预期的输出(似乎是您想要的)应该更直接地处理-在您的情况下,我建议直接打开输出文件,将其包装在csv.writer中,然后调用{{1 }}

例如:

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

如果您要确保文件正确关闭