相关疑难解决方法(0)

如何在Python中安全地创建嵌套目录?

检查文件目录是否存在的最优雅方法是什么,如果不存在,使用Python创建目录?这是我尝试过的:

import os

file_path = "/my/directory/filename.txt"
directory = os.path.dirname(file_path)

try:
    os.stat(directory)
except:
    os.mkdir(directory)       

f = file(filename)
Run Code Online (Sandbox Code Playgroud)

不知何故,我错过了os.path.exists(感谢kanja,Blair和Douglas).这就是我现在拥有的:

def ensure_dir(file_path):
    directory = os.path.dirname(file_path)
    if not os.path.exists(directory):
        os.makedirs(directory)
Run Code Online (Sandbox Code Playgroud)

是否有"开放"的标志,这会自动发生?

python directory operating-system exception path

3909
推荐指数
28
解决办法
245万
查看次数

"u"和"r"字符串标志究竟做了什么,以及什么是原始字符串文字?

在问这个问题时,我意识到我对原始字符串知之甚少.对于那些自称是Django训练师的人来说,这很糟糕.

我知道编码是什么,而且我知道u''自从我得到什么是Unicode以来我们独自做了什么.

  • 但到底r''做了什么呢?它会产生什么样的字符串?

  • And above all, what the heck does ur'' do?

  • Finally, is there any reliable way to go back from a Unicode string to a simple raw string?

  • Ah, and by the way, if your system and your text editor charset are set to UTF-8, does u'' actually do anything?

python unicode python-2.x rawstring

600
推荐指数
7
解决办法
41万
查看次数

Python使用相同的记录器记录多个文件

这是我的场景:我想记录my_module的活动.根据执行的方法(比如INPUT和OUTPUT),这需要完成两个不同的文件.

所以我有两个处理程序,每个处理程序指向一个不同的文件(my_in_.log和my_out_.log),具有相同的日志级别.我想知道我是否可以使用相同的记录器来实现这一点,或者我必须定义两个记录器.我的配置是:

[loggers]
keys=root, my_log

[handlers]
keys=my_in_hand, my_out_hand

[formatters]
keys=generic_form


...


[logger_my_log]
level=NOTSET
handlers=my_in_hand, my_out_hand
qualname=ws_log

[handler_my_in_hand]
class=handlers.TimeRotatingFileHandler
level=NOTSET
formatter=generic_form
args=('my_in_.log', 'h', 1, 0, None, False, True)

[handler_my_out_hand]
class=handlers.TimeRotatingFileHandler
level=NOTSET
formatter=generic_form
args=('my_out_.log', 'h', 1, 0, None, False, True)
Run Code Online (Sandbox Code Playgroud)

我是否必须为每个处理程序/目标定义一个记录器?(因为我想在不同的文件中记录不同的信息)有没有办法向记录器指示哪个处理程序会这样做?我的意思是,我有一个记录器的两个处理程序,然后只选择一个处理程序来记录一个方法.

多谢!

python logging config

13
推荐指数
3
解决办法
1万
查看次数

Python 日志记录检索特定处理程序

我们正在开发一个 python 程序/库,我们想为其设置一个日志系统。基本上我们想在终端上登录或在文件上登录。为此,我们将使用标准发行版中嵌入的优秀日志记录包。

用户应通过其首选项来自定义日志记录级别。我的问题是如何检索连接到记录器的处理程序之一?我在想一些类似这样的事情:

import logging

class NullHandler(logging.Handler):
    def emit(self,record):
        pass

HANDLERS = {}
HANDLERS['console'] = logging.StreamHandler()
HANDLERS['logfile'] = logging.FileHandler('test.log','w')

logging.getLogger().addHandler(NullHandler())
logging.getLogger('console').addHandler(HANDLERS['console'])
logging.getLogger('logfile').addHandler(HANDLERS['logfile'])

def set_log_level(handler, level):
    if hanlder not in HANDLERS:
        return

    HANDLERS[handler].setLevel(level)

def log(message, level, logger=None):

    if logger is None:
        logger= HANDLERS.keys()

    for l in logger:
        logging.getLogger(l).log(level, message)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的实现意味着使用 HANDLERS 全局字典来存储我创建的处理程序的实例。我找不到更好的方法来做到这一点。在该设计中,可以说,由于我只为每个记录器插入一个处理程序,因此我的记录器对象的处理程序属性应该没问题,但我正在寻找更通用的东西(即,如果有一天插入多个处理程序,该怎么办到我的一位记录器?)

你怎么看待这件事 ?

非常感谢

埃里克

python logging

6
推荐指数
1
解决办法
6143
查看次数