我正在尝试使用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库向其中写入行,对吧?
答案 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
如果您要确保文件正确关闭