小编Joh*_*ohn的帖子

在python日志记录中使用dictConfig,需要使用与dict中定义的文件不同的文件创建一个记录器.

我有一个LOG_SETTINGS dict,看起来像:

LOG_SETTINGS = {
'version': 1,
'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'level': 'INFO',
        'formatter': 'detailed',
        'stream': 'ext://sys.stdout',
    },
    'file': {
        'class': 'logging.handlers.RotatingFileHandler',
        'level': 'INFO',
        'formatter': 'detailed',
        'filename': '/tmp/junk.log',
        'mode': 'a',
        'maxBytes': 10485760,
        'backupCount': 5,
    },

},
'formatters': {
    'detailed': {
        'format': '%(asctime)s %(module)-17s line:%(lineno)-4d ' \
        '%(levelname)-8s %(message)s',
    },
    'email': {
        'format': 'Timestamp: %(asctime)s\nModule: %(module)s\n' \
        'Line: %(lineno)d\nMessage: %(message)s',
    },
},
'loggers': {
    'extensive': {
        'level':'DEBUG',
        'handlers': ['file',]
        },
}
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我执行以下操作:

logging.config.dictConfig(LOG_SETTINGS)

logger = logging.getLogger('extensive')
logger.info("This is …
Run Code Online (Sandbox Code Playgroud)

python logging

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

自定义dict类的ipython选项卡完成

我一直在我的代码中使用以下内容:

class Structure(dict,object):
""" A 'fancy' dictionary that provides 'MatLab' structure-like
referencing. 

"""
def __getattr__(self, attr):
    # Fake a __getstate__ method that returns None
    if attr == "__getstate__":
        return lambda: None
    return self[attr]

def __setattr__(self, attr, value):
    self[attr] = value

def set_with_dict(self, D):
    """ set attributes with a dict """
    for k in D.keys():
        self.__setattr__(k, D[k])
Run Code Online (Sandbox Code Playgroud)

总而言之,它适用于我的目的,但我注意到,只有方法选项卡完成才能用于继承自Structure的另一个自定义类中的方法,而不是属性.我也做了这个测试,我发现结果有点奇怪:

In [2]: d = Structure()
In [3]: d.this = 'that'
In [4]: d.this
Out[4]: 'that'
In [5]: d.th<tab>
NOTHING HAPPENS

In [6]: class …
Run Code Online (Sandbox Code Playgroud)

python

11
推荐指数
1
解决办法
2273
查看次数

熊猫与不同频率(每小时和每天)的数据帧合并

我正在尝试合并每天或每小时的数据帧。似乎在我的循环的第一次迭代中,我可以将第一个每日值与每小时值合并。但是第二次我收到这个错误:

raise Exception('Cannot join tz-naive with tz-aware DatetimeIndex')
Exception: Cannot join tz-naive with tz-aware DatetimeIndex
Run Code Online (Sandbox Code Playgroud)

我真的不能提供一个很好的例子,但我现在所有的数据帧在创建时都是 tz-aware(例如,我df.tz_localize('UTC')在创建后调用每个数据帧。

python dataframe pandas

10
推荐指数
1
解决办法
8258
查看次数

从python numpy数组中写入逗号分隔值

我正在创建一个自定义文件编写器.我需要写出我的数组的值,逗号分隔成文件中的一行.我可以做以下事情:

def as_csv(array):

    return ','.join([str(i) for i in array]) + '\n'
Run Code Online (Sandbox Code Playgroud)

然后:

outfile.write(my_header)
outfile.write(other_stuff)
outfile.write(as_csv(array))
Run Code Online (Sandbox Code Playgroud)

但我想知道这是否是最有效的方法,或者是否有更好的方法使用numpy.array_str或numpy.array_repr方法.

python csv numpy

4
推荐指数
1
解决办法
3825
查看次数

pandas concat/merge和sum一列

我有两个pandas.DataFrameMultiIndex索引的对象.一些索引值与两个数据帧共享,但不是全部.我想合并这两个数据帧,如果行(索引值)存在,则取其中一列的总和.否则,保持行和列值不变.

:这很接近,但不使用MultiIndex

我试图创建一个例子:

def mklbl(prefix,n):
try:
    return ["%s%s" % (prefix,i)  for i in range(n)]
except:
    return ["%s%s" % (prefix,i) for i in n]



mi1 = pd.MultiIndex.from_product([mklbl('A',4), mklbl('C',2)])

mi2 = pd.MultiIndex.from_product([mklbl('A',[2,3,4]), mklbl('C',2)])

df2 = pd.DataFrame({'b':np.arange(len(mi2)), 'c':np.arange(len(mi2))[::-1]},
      index=mi2).sort_index().sort_index(axis=1)

df1 = pd.DataFrame({'a':np.arange(len(mi1)), 'b':np.arange(len(mi1))[::-1]},
      index=mi1).sort_index().sort_index(axis=1)
Run Code Online (Sandbox Code Playgroud)

各个DataFrame对象看起来像:

In [117]: df1
Out[117]: 
       a  b
A0 C0  0  7
   C1  1  6
A1 C0  2  5
   C1  3  4
A2 C0  4  3
   C1  5  2
A3 C0  6 …
Run Code Online (Sandbox Code Playgroud)

python pandas

2
推荐指数
1
解决办法
2856
查看次数

递归删除python字典

我有一大堆代码,它使用一些自定义类和许多字典.许多类都将字典添加为属性.我发现它使用了太多的内存,特别是如果我循环 - 即使我手动删除了一些类和dicts.

我担心的是,字典会被删除,但它们包含的对象仍然存在.我需要重构代码以获得更好的内存管理,但作为一个快速的解决方案,我希望我可以递归并且积极地删除字典.这将如何实现?

这是一个例子......

def get_lrg():
    return {1: np.zeros((1000,1000,100))}

class H():
    def add_lrg(self):
        fd = get_lrg()
        self.lrg = fd

for cls in ['a', 'b', 'c', 'd']:
    exec('{0} = H()'.format(cls) )
    exec('{0}.add_lrg()'.format(cls) )

del a
del b
del c
del d
Run Code Online (Sandbox Code Playgroud)

另外,在Ipython中玩这个:

fd = get_lrg()
fd2 = get_lrg()
F = {1: fd, 2: fd2}
F = {}
F = {1: fd, 2: fd2}
del F[1]

del F
Run Code Online (Sandbox Code Playgroud)

并观察python应用程序的内存使用情况......即使在删除了字典"F"之后,它似乎也没有"释放"内存(例如,没有引用对象).我在我的机器上发现的结果是不可预测的.有时看起来内存会被刷新,有时它似乎会被使用.

python dictionary

0
推荐指数
1
解决办法
635
查看次数

标签 统计

python ×6

pandas ×2

csv ×1

dataframe ×1

dictionary ×1

logging ×1

numpy ×1