我的问题如下:我有一些python类具有从其他属性派生的属性; 这些应该在计算后缓存,并且每次更改基本属性时缓存的结果都应该无效.
我可以手动完成,但如果属性数量增加,似乎很难维护.所以我希望在我的对象中有类似Makefile规则的东西来自动跟踪需要重新计算的内容.
所需的语法和行为应该是这样的:
# this does dirty magic, like generating the reverse dependency graph,
# and preparing the setters that invalidate the cached values
@dataflow_class
class Test(object):
def calc_a(self):
return self.b + self.c
def calc_c(self):
return self.d * 2
a = managed_property(calculate=calc_a, depends_on=('b', 'c'))
b = managed_property(default=0)
c = managed_property(calculate=calc_c, depends_on=('d',))
d = managed_property(default=0)
t = Test()
print t.a
# a has not been initialized, so it calls calc_a
# gets b value
# c has not …Run Code Online (Sandbox Code Playgroud) 我在使用Python和SQLite进行日期存储/检索时遇到了设计问题.
我知道SQLite日期列将日期存储为ISO格式的文本(即'2010-05-25').因此,当我显示英国日期(例如,在网页上)时,我使用转换日期
datetime.datetime.strptime(mydate,'%Y-%m-%d').strftime('%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)
然而,当谈到将数据写回到表中时,SQLite非常宽容并且非常乐意存储'25/06/2003'在日期字段中,但这并不理想,因为
我可以在同一列中留下混合的日期格式,
SQLite的日期函数仅适用于ISO格式.
因此,我需要在提交之前将日期字符串转换回ISO格式,但是我需要一个通用函数来检查要在所有日期字段中写入的数据,并在必要时转换为ISO.这对我来说听起来有点乏味,但也许这是不可避免的.
有更简单的解决方案吗?是否更容易将日期字段更改为10个字符的字段并存储'dd/mm/yyyy'在整个表中?这样在从表中读取或写入时不需要转换,如果我需要执行任何日期算术,我可以使用datetime()函数.
其他开发人员如何克服这个问题?任何帮助,将不胜感激.为了记录,我在Python 3.1中使用SQLite3.
我从MySQL站点下载了mysql-connector-python-1.0.7-py2.7.msi并尝试安装,但它给出了错误
找不到Python v2.7.我们只支持python.org上的Microsoft Windows Installer(MSI).
我使用MySQL esssential5.1.66在Windows XP SP3上使用官方Python v 2.7.3
需要帮忙 ???
函数对象具有属性__defaults__和__kwdefaults__.我看到,如果一个函数有一些默认的参数,然后它们被放在一个元组__defaults__却__kwdefaults__是None.何时使用属性__kwdefaults__?
我正在寻找一个用Python(模块或命令行)编写的免费(如在自由中)HTML压头(或重新压缩).我不需要使用白名单过滤HTML.我只想缩进(或重新缩进)HTML源代码以使其更具可读性.例如,假设我有以下代码:
<ul><li>Item</li><li>Item
</li></ul>
Run Code Online (Sandbox Code Playgroud)
输出可能是这样的:
<ul>
<li>Item</li>
<li>Item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
注意:我不是在寻找非Python软件的接口(例如Tidy,用C语言编写),而是100%的Python脚本.
非常感谢.
在matplotlib的情节中,我特别想在x轴上将点标记为乳胶中的pi/2,pi,3pi/2等.我该怎么做?
我写了一个永远不会终止的短脚本.这个脚本不断生成输出,我不得不每次检查.我在实验室计算机上通过SSH运行它,并将输出重定向到该机器上的public_html文件夹中的文件.
python script.py > ~/public_html/results.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我刷新地址时,结果不会立即显示.当我终止程序时,结果显示出来,但正如我所说,它不会自行停止.这个redirect(>)是否与写作一样懒惰?有没有办法连续(或间隔)更新文件中的结果?
或者是网络服务器在仍在编写时不更新文件?
我安装了django-celery,我试图启动工作服务器,但是我得到一个没有实现函数的OSError.我在VPS上运行CentOS 5.4版(最终版):
. broker -> amqp://guest@localhost:5672/
. queues ->
. celery -> exchange:celery (direct) binding:celery
. concurrency -> 4
. loader -> djcelery.loaders.DjangoLoader
. logfile -> [stderr]@WARNING
. events -> OFF
. beat -> OFF
[2010-07-22 17:10:01,364: WARNING/MainProcess] Traceback (most recent call last):
[2010-07-22 17:10:01,364: WARNING/MainProcess] File "manage.py", line 11, in <module>
[2010-07-22 17:10:01,364: WARNING/MainProcess] execute_manager(settings)
[2010-07-22 17:10:01,364: WARNING/MainProcess] File "/usr/local/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
[2010-07-22 17:10:01,364: WARNING/MainProcess] utility.execute()
[2010-07-22 17:10:01,364: WARNING/MainProcess] File "/usr/local/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
[2010-07-22 17:10:01,365: …Run Code Online (Sandbox Code Playgroud) 我在更改数据框中的值时遇到问题.我还想咨询一下我需要解决的问题以及使用pandas解决问题的正确方法.我会很感激两者的帮助.我有一个文件,其中包含有关音频文件与扬声器匹配程度的信息.该文件看起来像这样:
wave_path spk_name spk_example# score mark comments isUsed
190 122_65_02.04.51.800.wav idoD idoD 88 NaN NaN False
191 121_110_20.17.27.400.wav idoD idoD 87 NaN NaN False
192 121_111_00.34.57.300.wav idoD idoD 87 NaN NaN False
193 103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
194 131_101_02.08.06.500.wav idoD idoD_0 96 HIT VP False
Run Code Online (Sandbox Code Playgroud)
我需要做的是某种复杂的计数.我需要通过扬声器对结果进行分组,并为每个扬声器计算一些计算.然后我继续使用为我做出最佳计算的扬声器,但在继续之前,我需要将我用于计算的所有文件标记为正在使用,即更改它们出现的每一行的isUsed值(文件可以出现不止一次)为真.然后我再做一次迭代.计算每个扬声器,标记使用过的文件等,直到不再计算扬声器为止.
我想了很多关于如何使用pandas实现该过程(在常规python中很容易实现,但是需要大量的循环和数据结构,我的猜测会大大减慢这个过程,而且我也在使用它学习熊猫能力的过程更深入)
我出来了以下解决方案.作为准备步骤,我将按扬声器名称分组,并通过set_index方法将文件名设置为索引.然后,我将迭代groupbyObj并应用计算功能,该功能将返回所选扬声器和要标记为已使用的文件.
然后我将遍历文件并将它们标记为已使用(这将是快速而简单的,因为我事先将它们设置为索引),依此类推,直到我完成计算.
首先,我不确定这个解决方案,所以请随时告诉我你的想法.现在,我已经尝试实现这个,并遇到了麻烦:
首先我按文件名索引,这里没问题:
In [53]:
marked_results['isUsed'] = False
ind_res = marked_results.set_index('wave_path')
ind_res.head()
Out[53]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
131_101_02.08.06.500.wav idoD …Run Code Online (Sandbox Code Playgroud) 我有一个Numpy rec数组,我想从中做一些类似于SQL的快速查询:SELECT * where array['phase'] == "P".我想获得一个记录数组作为输出,每行对应于满足查询条件的原始数组中的一行.有任何想法吗?我很确定我以前做过这个,但是不记得这个功能.
谢谢
rec.array([ (5295499, 2.8123965, 127.20443, 0.0, 1237680436.06, 908, -19.942589, 134.33951, 0.3888, 'P', 0.19513991),
(5295499, 2.8123965, 127.20443, 0.0, 1237680436.06, 1387, -18.102, 125.639, 0.11, 'P', 1.2515257),
(5447254, 39.025873, 143.31065, 0.0, 1245455521.85, 1512, 33.121667, 130.87833, 0.573, 'LR', 45.099504)],
dtype=[('eventid', '<i4'), ('eventlat', '<f8'), ('eventlon', '<f8'), ('eventdepth', '<f8'), ('eventtime', '<f8'), ('stationid', '<i4'), ('stationlat', '<f8'), ('stationlon', '<f8'), ('stationelv', '<f8'), ('phase', '|S7'), ('timeresidual', '<f8')])
Run Code Online (Sandbox Code Playgroud) python ×9
bash ×1
celery ×1
celery-task ×1
command-line ×1
dataflow ×1
dataframe ×1
dependencies ×1
django ×1
html ×1
indentation ×1
latex ×1
lazy-loading ×1
linux ×1
matplotlib ×1
mysql ×1
numpy ×1
pandas ×1
properties ×1
python-2.7 ×1
python-3.x ×1
recarray ×1
select ×1
shell ×1
sqlite ×1