【问题标题】:How to write to a CSV using Python logging library?如何使用 Python 日志库写入 CSV?
【发布时间】:2019-04-03 21:41:41
【问题描述】:

我正在尝试使用 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 库向其写入行,对吧?

【问题讨论】:

  • 除非您有非常令人信服的理由为此使用logging,否则您应该使用csv
  • @CertainPerformance 我以为我确实有解决方案,但后来意识到我没有并再次取消删除问题哈哈。我认为我链接文章中的解决方案有效,因为我对其进行了修改以将数组保留为数组,但后来发现它甚至根本不是深层副本。 screencast.com/t/ZYoHERJt6v

标签: python python-3.x csv logging


【解决方案1】:

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

应更直接地处理预期/预期的输出(似乎是您所追求的)-在您的情况下,我建议直接打开输出文件,包装在 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)
  …

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

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 2010-09-11
    • 1970-01-01
    • 2022-07-06
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多