所以我有一个数据库,有几年的网站数据.我现在正试图将这些数据用于分析 - 通过关键字等绘制和分类广告费用.
数据库中的一个数据抓取需要几分钟才能完成.虽然我可以花一些时间来优化我用来获取数据的SQL语句,但我更喜欢只留下那个类,而只是SQL,抓取数据,并将结果保存到数据文件中,以便以后更快地检索.大多数这些数据库数据都不会改变,因此我可以编写一个单独的python脚本来每24小时更新一次文件,然后将该文件用于这个长时间运行的任务.
数据作为numpy数组的字典返回.当我使用numpy.save('data', data)文件保存得很好.当我使用data2 = numpy.load('data.npy')它时加载文件没有错误.但是,输出data2并不等于原始输出data.
特别是该行data == data2返回false.另外,如果我使用以下内容:
for key, key_data in data.items():
print key
Run Code Online (Sandbox Code Playgroud)
有用.但当我替换时data.items(),data2.items()我得到一个错误:
AttributeError: 'numpy.ndarray' object has no attribute 'items'
Run Code Online (Sandbox Code Playgroud)
用type(data)我得到dict.用type(data2)我得到numpy.ndarray.
那么我该如何解决这个问题呢?我希望加载的数据等于我传入的用于保存的数据.numpy.save是否有一个参数来解决这个问题,还是需要某种形式的简单重新格式化功能来将加载的数据重新格式化为正确的结构?
尝试进入ndarrayvia循环或索引都会导致有关索引0-d数组的错误.像这样dict(data2)的强制转换也无法迭代0-d数组.但是,Spyder显示数组的值,它包含我保存的数据.我只是无法弄清楚如何去做它.
如果我需要重新格式化加载的数据,我会欣赏一些关于如何执行此操作的示例代码.
我已经阅读了多篇StackOverflow文章以及大部分Google十大搜索结果.我的问题偏离的地方是我在python中使用一个脚本来创建我的JSON文件.并且在10分钟后运行的下一个脚本无法读取该文件.
简短版本,我为我的在线业务生成线索.我正在尝试学习python,以便对这些线索进行更好的分析.我正在搜索2年的潜在客户,目的是保留有用的数据并丢弃任何个人信息 - 电子邮件地址,姓名等 - 同时还将30,000多个潜在客户保存到几十个文件中以便于访问.
因此,我的第一个脚本打开每个单独的主文件--30,000 + - 根据文件中的时间戳确定捕获的日期.然后它保存导致dict中的相应键.当所有数据已聚合到此dict中时,文本文件将使用json.dumps编写.
该字典的结构是:
addData['lead']['July_2013'] = { ... }
Run Code Online (Sandbox Code Playgroud)
其中'lead'键可以是lead,partial和其他几个,'July_2013'键显然是一个基于日期的键,可以是完整月份和2013年或2014年的任何组合,可以追溯到'February_2013'.
完整的错误是这样的:
ValueError: Unterminated string starting at: line 1 column 9997847 (char 9997846)
Run Code Online (Sandbox Code Playgroud)
但是我手动查看了文件,我的IDE说文件中只有76,655个字符.那怎么去了9997846?
失败的文件是要读取的第8个文件; 通过json.loads读入之后的其他7和所有其他文件就好了.
Python说有一个未终止的字符串,所以我查看了文件中JSON的结尾失败,看起来没问题.我已经看到一些关于JSON中的换行符的提及,但这个字符串都是一行.我已经看到提及\ vs \但快速查看整个文件我没有看到任何.其他文件确实有\并且它们读得很好.而且,这些文件都是由json.dumps创建的.
我无法发布该文件,因为它仍然包含个人信息.手动尝试验证76,000个char文件的JSON是不可行的.
关于如何调试这一点的想法将不胜感激.与此同时,我将尝试重建文件,看看这不仅仅是一次性错误,但需要一段时间.
---编辑---每个请求我在这里发布编写代码:
from p2p.basic import files as f
from p2p.adv import strTools as st
from p2p.basic import strTools as s
import os
import json
import copy
from datetime import datetime
import time
global leadDir
global archiveDir
global aggLeads
def aggregate_individual_lead_files(): …Run Code Online (Sandbox Code Playgroud) 我正在研究这个问题的答案: 是否可以在Enum中定义一个类常量?
最让我感兴趣的是Ethan Furman答案中的Constant课程.
class Constant:
def __init__(self, value):
self.value = value
def __get__(self, *args):
return self.value
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.value)
Run Code Online (Sandbox Code Playgroud)
问题是关于Python 3.4,但我使用的是2.7.在答案中,Ethan将引力常数设置为Planet类的实例变量,如下所示:
G = Constant(6.67300E-11)
Run Code Online (Sandbox Code Playgroud)
我在2.7中对这个类的测试表明只输入G就是这样:
Out[49]: Constant(3)
Run Code Online (Sandbox Code Playgroud)
(我将它设置为3以便于测试时使用.这看起来像__repr__输出给我,如果我错了,请纠正我.)
该值可通过G.value获得.但是,在Ethan的回答中他使用了
return self.G * self.mass / (self.radius * self.radius)
Run Code Online (Sandbox Code Playgroud)
这显然只有在__repr__输出值返回时才有效.现在,如果我class Constant:改为class Constant(int):然后输入GI仍然得到__repr__输出,但如果我输入G * 4我得到的12不是我得到的错误.(TypeError:*:'instance'和'int'不支持的操作数类型)
很明显像int对象这样的东西在调用时可以输出一个数字.有没有一种我想要的魔术方法可以让我为Constant类做这个?由于常量可以是字符串,整数或浮点数,因此我更倾向于使用1个处理它们的类,而不是扩展这些对象的3个单独的类.
该值也可通过G.value设置.我可以将其锁定,以便Constant类的行为类似于实际的常量吗?(我怀疑答案是否定的.)
我的服务器设置很好,允许我通过WordPress提供的漂亮按钮更新插件,主题和核心.但是,升级到3.8后我无法升级任何东西.但是,我也在同一时间向服务器添加了iptables,但我不认为这是问题 - 我关闭iptables并尝试但没有任何成功.
当我尝试通过WordPress的FTP上传插件/更新时,它无法通过localhost连接.127.0.0.1和公共IP都会在很长很长一段时间后返回"无法定位wordpress内容目录(wp-content)",建议超时或多次超时.
环境:
我用google搜索,绝大多数修复都归结为权限.但是,正如我上面所说,我已经尝试将目录的所有者和权限更改为777.所以,我认为权限是死路一条.
我原本以为iptables在某种程度上妨碍了我.但是我把它关了/冲了桌子却没有成功.所以我认为iptables不是罪魁祸首.
其他Google搜索解决方案等于向wp-config.php文件添加一些代码.然而,其中一个完全破坏了网站.另一个没有效果.
Apache和域的日志没有显示.它们不是空的,但没有一个引用wp内容或任何我能想到的与之相关的内容.ftp日志显示已通过127.0.0.1成功建立连接.
所以此时我已经用尽了一些技巧.
-------------编辑:我对wp-config所做的改动-------------根据http://wordpress.org/support/topic/unable-- to-locate-wordpress-content-directory-wp-content我改变了wp-config.php来包括:
if(is_admin()) {
add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
define( 'FS_CHMOD_DIR', 0751 );
}
Run Code Online (Sandbox Code Playgroud)
这是4年前在WordPress 2.8中针对同一问题提出的解决方案.在添加这些行后,该站点将无法加载,并且考虑到我将它们取出的帖子/解决方案的年龄,并且没有对网站无法加载的原因进行进一步的故障排除.我假设它正在调用一些WP中不存在的函数.
我添加到wp-config.php的第二段代码是:
putenv('TMPDIR='. ABSPATH .'tmp');
define('WP_TEMP_DIR', ABSPATH . 'tmp');
Run Code Online (Sandbox Code Playgroud)
根据http://wordpress.org/support/topic/unable-to-locate-wordpress-content-directory-wp-content?replies=15.这并没有打破网站,但没有解决它,所以我删除它.
我一整天都在与这个问题作斗争,并进行了大量的谷歌搜索。我遇到了似乎是继承问题。
我有一个名为 BaseClass 的类,它为我做一些简单的事情,例如设置日志记录默认值、保存日志和管理只读属性。过去我对这个课程没有任何问题,但我可以说我现在只使用 python 几个月了。此外,我认为有一些重要的警告:
__getattr__任何__getattribute__继承 BaseClass 的类。今天我是。BaseClass 有__getattribute__自己的方法来管理只读属性的获取。BaseFormData 类有一个__getattr__方法,因为我读到这是提供数据访问而无需显式声明所有属性的正确方法。正在加载的表单数据中有十几个或更多数据(取决于版本),因此我明确声明了一些重要或别名的属性,而将其余属性留给__getattr__.这是__getattribute__来自 BaseClass 的:
def __getattribute__(self, attr):
try:
# Default behaviour
return object.__getattribute__(self, attr)
except:
try:
return self.__READ_ONLY[attr]
except KeyError:
lcAttr = php_basic_str.strtolower(attr)
return self._raw[lcAttr]
Run Code Online (Sandbox Code Playgroud)
使用的行self._raw仅仅因为继承 BaseClass 的类经常使用_raw。_rawBaseClass 不需要。理想情况下,对的引用_raw仅出现在继承类的__getattr__或中。__getattribute__但是,我需要__getattribute__在 BaseClass 中使用才能使只读功能正常工作。
以及__getattr__来自 BaseFormData …
在PHP中,您使用===符号来测试TRUE或FALSE区别于1或0.
例如,if FALSE == 0返回TRUE,if FALSE === 0返回FALSE.因此,当在基数0中进行字符串搜索时,如果所讨论的子字符串的位置在开头就是正确的,那么您可以0从中区分出哪些PHP FALSE.
有没有办法在Python中这样做?
在 PHP 类中,解析器处理__construct和__destruct方法来实例化实例并在脚本退出或使用 unset 时销毁它。当您扩展一个类时,您只需使用parent::__construct和parent::__destruct来运行可能需要在扩展的类上运行的任何清理代码。
现在,在表示数据库数据并帮助您操作该数据的类的上下文中,我认为__destruct可以使用一种方法来将当前值与从数据库中获取的原始值进行比较,并在必要时进行更新(在某些情况下总是如此)只要主键值无法更改,就进行更新)。在 PHP 中实现这一点非常简单。
这种方法的主要优点是根据需要快速简单地操作类变量,然后让类在最后进行一次大的更新。在运行几分钟的长脚本中,最好在 __construct 期间创建数据库实例、获取数据、关闭数据库连接,然后仅在几分钟的长时间执行期间操作类变量。在 __destruct 上,打开一个新的数据库连接进行更新,然后关闭数据库连接并清理任何其他需要清理的内容。
我很好奇人们对这是否是一个好主意/坏做法的想法,但我的主要问题是这在 Ruby 中是否可能。
在 Ruby 中,您可以在实例化类的实例时运行初始化方法。Ruby 中的等效项parent::__construct是superRuby。Ruby 类有ObjectSpace.define_finalizeand方法。finalize但是,据我了解,finalize 方法不应该能够引用调用它的实例。最重要的是,我找不到任何与parent::__destruct. 我怀疑这是因为没有等效的方法,因为该finalize方法似乎是明确设计来防止引用本身的。
那里有人知道如何做到这一点吗?如果不是,转储 Ruby 类以取回资源并防止数据丢失的最佳实践是什么?是否每个人都有一个在将类实例设置为 nil 之前调用的 Garbage_collection 方法,或者还有其他方法吗?
谢谢
在Ruby中,我有一个DAO类,它通过一个类来扩展,这使得管理连接变得更容易,这个类由表示和操作DB中的数据的类扩展,该类由另一个类进一步扩展.使用动物比喻它看起来像这样:
class Animal
...
end
class Mammal < Animal
...
end
class Feline < Mammal
...
end
class Cat < Feline
...
end
class Lion < Cat
...
end
...
Run Code Online (Sandbox Code Playgroud)
在PHP中,有一种__destruct方法可以在销毁/删除类时运行.如果该类扩展另一个类,您只需添加parent::__destruct()到类的__destruct方法,如下所示:
public function __destruct() {
// Clean up code for this class here
...
// Execute clean up code for Parent class
parent::__destruct();
}
Run Code Online (Sandbox Code Playgroud)
我可以为所有类提供类似的方法,除了Animal.由于它没有扩展任何内容,因此该parent::__destruct();行不再有效.
但是,据我所知,Ruby没有像这样的方法用于它的对象.可以设置终结器,但我决定cleanup只要我想要销毁/删除一个类就可以调用一个方法.这会照顾我在设置课程之前需要做的任何事情nil.
这引发了一个新问题.如果方法总是被命名cleanup并且我打电话lion_instance.cleanup,我认为它调用了Lion#cleanup.然后如何让它cleanup在课堂上调用Cat …
如果没有一些标准库函数,我会感到震惊,尤其是在 numpy 或 scipy 中,但没有多少谷歌搜索提供了一个像样的答案。
我正在从 Poloniex 交易所获取数据 - 加密货币。把它想象成将股票价格 - 买卖订单 - 推送到您的计算机。所以我所拥有的是任何给定市场的价格时间序列。一个市场可能每天更新 10 次,而另一个市场每分钟更新 10 次——这完全取决于市场上买卖的人数。
所以我的时间序列数据最终会是这样的:
[1 0.0003234,
1.01 0.0003233,
10.0004 0.00033,
124.23 0.0003334,
...]
Run Code Online (Sandbox Code Playgroud)
其中第一列是时间值(我使用 Unix 时间戳到微秒,但认为在示例中没有必要。第二列将是价格之一 - 买入或卖出价格。
我想要的是将它转换成一个矩阵,其中数据在固定的时间范围内被“采样”。所以插值(零阶保持)矩阵将是:
[1 0.0003234,
2 0.0003233,
3 0.0003233,
...
10 0.0003233,
11 0.00033,
12 0.00033,
13 0.00033,
...
120 0.00033,
125 0.0003334,
...]
Run Code Online (Sandbox Code Playgroud)
我想以任何合理的时间步长来做到这一点。现在我np.linspace(start_time, end_time, time_step)用来创建新的时间向量。
编写我自己的,公认的粗糙的零阶保持插值器不会那么难。我将遍历原始时间向量并使用 np.nonzero 查找新时间向量中适合一个时间戳 (t0) 和下一个时间戳 (t1) 之间的所有索引,然后用时间 t0 的值填充这些索引。
现在,粗略的方法会奏效。价格矩阵并不是那么大。但是我必须考虑使用其中一个内置库的更快方法。我就是找不到。
此外,对于上面的示例,我仅使用 Nx2 矩阵(第 1 列:时间,第 2 列:价格),但最终市场有 6 或 8 …
我正在尝试在我的工程wiki的Ubuntu 16.04服务器上安装Mathtex.这是一场噩梦,就像过去我尝试过的那样.
首先,我通过apt-get安装了mathtex.抱怨缺少目录.手动创建这些目录后,它继续抱怨另一个目录.最后抱怨丢失的缓存目录.我像其他人一样创建缓存,mathtex仍抱怨缓存目录丢失...
然后我尝试通过网站上的说明安装(http://www.forkosh.com/mathtex.html).换句话说,安装依赖项LaTeX和dvipng.然后使用cc编译程序(虽然我使用gcc).我已经在以前安装的Ubuntu - 12.04或14.04中使用它 - 但是再也找不到那些指令了.直到今年夏天他们倒闭时,我才支付服务费用.
这是编译行:
cc mathtex.c –DLATEX=\"$(which latex)\" –DDVIPNG=\"$(which dvipng)\" –o mathtex.cgi
Run Code Online (Sandbox Code Playgroud)
这是回报:
cc: error: –DLATEX="/usr/bin/latex": No such file or directory
cc: error: –DDVIPNG="/usr/bin/dvipng": No such file or directory
cc: error: –o: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我也试着更换$(which latex)用$(which pdftex)(在/ usr/bin中/乳胶是一个符号链接到/ usr/bin中/ Pdftex提供)和/usr/bin/pdftex,/usr/bin/tex,/usr/bin,和/usr/bin/.同样的结果,错误说没有这样的文件或目录.
谷歌搜索此错误仅返回无法让Ubuntu将gcc识别为cc编译器的人的帮助.但这不是我的问题.