如何在记录列表和数组时插入换行符?

时间:2015-03-14 09:19:23

标签: python list logging

我正在尝试使用Python的日志记录模块将列表输出到日志文件中。我使用的代码是:

import logging
import os
logging.basicConfig(filename = 'Log.log', level = logging.DEBUG, filemode = 'w', format = '%(asctime)s \t %(levelname)s \t %(message)s', datefmt="[%Y-%m-%d %H:%M:%S]")
file_list = []
for root, directories, files in os.walk('./Directory'):
    files = [f for f in files]
    for file in files:
        file_list.append(os.path.join(root, file))
logging.info('Files in list: %s', file_list)

这使我将日志文件中的输出作为一行。

输出

[2015-03-14 11:41:53]    INFO    Files in list: ['./Directory/Subdirectory 1/file_a.dat', './Directory/Subdirectory 1/file_1b.dat', './Directory/Subdirectory 1/Subdirectory 11/file_11a.dat', './Directory/Subdirectory 1/Subdirectory 11/Subdirectory 111/file_111a.dat', './Directory/Subdirectory 2/Subdirectory 22/Subdirectory 221/file_221a.dat', './Directory/Subdirectory 2/Subdirectory 22/Subdirectory 221/file_221b.dat', './Directory/Subdirectory 2/Subdirectory 22/Subdirectory 221/file_221c.dat']

我需要的只是新行中列表中的文件名。

所需的输出

[2015-03-14 11:41:53]    INFO    Files in list: file_a.dat
                                 file_1b.dat
                                 file_11a.dat
                                 file_111a.dat
                                 file_221a.dat
                                 file_221b.dat
                                 file_221c.dat

如何在Python中完成?

2 个答案:

答案 0 :(得分:1)

使用'\n'.join合并字符串newline作为分隔符和生成器表达式来删除目录名称:

logging.info('Files in list: %s', '\n'.join(os.path.basename(f)
                                            for f in file_list)))

答案 1 :(得分:1)

使用标准Pretty Print模块:

from pprint import pformat
logging.info('Files in list:\n%s', pformat(file_list))

输出示例:

[2015-03-14 14:23:47]    INFO    Files in list:
['./tmpvYWsRB.png',
 './Log.log',
 './tmpCG2Dn2',
 './ tmp7I36mh.png',

要仅打印文件名,请使用标准os.path.basename作为建议的用户4815162342。