我有一个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) 我一直在我的代码中使用以下内容:
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) 我正在尝试合并每天或每小时的数据帧。似乎在我的循环的第一次迭代中,我可以将第一个每日值与每小时值合并。但是第二次我收到这个错误:
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')在创建后调用每个数据帧。
我正在创建一个自定义文件编写器.我需要写出我的数组的值,逗号分隔成文件中的一行.我可以做以下事情:
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方法.
我有两个pandas.DataFrame带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) 我有一大堆代码,它使用一些自定义类和许多字典.许多类都将字典添加为属性.我发现它使用了太多的内存,特别是如果我循环 - 即使我手动删除了一些类和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"之后,它似乎也没有"释放"内存(例如,没有引用对象).我在我的机器上发现的结果是不可预测的.有时看起来内存会被刷新,有时它似乎会被使用.