我想要做的就是序列化和反序列化字符串或整数元组.
我查看了pickle.dumps(),但字节开销很大.基本上它看起来占用了大约4倍的空间.此外,我需要的只是基本类型,不需要序列化对象.
marshal在空间方面稍好一些,但结果却充满了令人讨厌的\ x00字节.理想情况下,我希望结果是人类可读的.
我想过只使用repr()和eval(),但是有一种简单的方法可以在不使用eval()的情况下实现这一点吗?
这将存储在数据库中,而不是文件中.字节开销很重要,因为它可以在需要TEXT列和varchar之间产生差异,通常数据紧凑性会影响db性能的所有区域.
我有一个嘈杂的python脚本,我想通过将其stderr输出指向/ dev/null(使用bash BTW)来保持沉默.
像这样:
python -u parse.py 1> /tmp/output3.txt 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
但它很快就会过早退出.嗯.我无法看到追溯因为当然与stderr一起出现了.如果我不指示某个地方的stderr,它会吵闹地运行.
因此,让我们尝试将其重定向到某个地方的文件而不是/ dev/null,并查看它的输出内容:
python -u parse.py 1> /tmp/output3.txt 2> /tmp/foo || tail /tmp/foo
Traceback (most recent call last):
File "parse.py", line 79, in <module>
parseit('pages-articles.xml')
File "parse.py", line 33, in parseit
print >>sys.stderr, "bad page title", page_title
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
因此,正在生成的stderr包含utf8,并且由于某种原因,python在被重定向时拒绝打印非ascii,即使它被定向到/ dev/null(当然python当然不知道).
即使它包含utf8,我如何使python脚本的stderr静音?有没有办法在没有重写这个脚本中的每个打印到stderr?
我必须通过没有那么多带宽的网络管道转储大型数据库,而其他人需要同时使用.如果我尝试它,它会吸收所有带宽和延迟,并且其他所有人都会搞砸.
我知道mysqldump的--compress标志有点帮助.
如何在不通过此连接吸收所有带宽的情况下执行此操作?
更新:
使用带有-l标志的scp复制转储文件的建议是一个很好的建议,但我应该注意,我没有对数据库服务器的SSH访问权限.
假设您要实现一个点击跟踪器,您只需要从任意IP地址计算一次点击链接,但链接和客户端的数量非常大,您不希望保留每个IP的表格 - 单击.假设您可能需要将此作为针对每次点击运行的内容的一部分,并且不希望针对每次点击对大表进行查找.
是否存在"概率哈希"或"有损哈希"这样的事情,看看IP是否可能在一个集合中但你不关心是否存在某种错误率,因为你想节省资源?
如何在innodb中物理表示非叶子 b树节点?
回想一下,b树(更具体地说是b +树)具有叶节点和非叶节点.在b +树中,所有叶节点都位于非叶子或"内部"节点的树下面,并指向实际包含行数据的页面.
我知道非叶节点存储在非叶节点段中,并使用类似数据页的页面.我已经找到了关于如何物理存储数据页面的大量文档,但是我无法找到关于非叶索引页面的内容.
我认为有人试图模拟第二个auto_increment值.刚升级到MySQL 5.5.9
CREATE TABLE `job_title` (
`job_id` int(11) NOT NULL AUTO_INCREMENT,
`position_id` int(11) DEFAULT NULL,
`title` varchar(255) COLLATE latin1_general_cs NOT NULL,
`selectable` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`job_id`),
UNIQUE KEY `title` (`title`)
) ENGINE=InnoDB;
create trigger job_position_trigger
before insert on job_title for each row
begin
if new.position_id is null then
set @position = (select max(position_id)+1 from job_title);
set new.position_id = @position;
end if;
end
Run Code Online (Sandbox Code Playgroud)
错误: Thread stack overrun: 9024 bytes used of a 131072 byte stack, and 128000 …
我想获得BSD词典单词列表中每个单词的前两个字母,不包括那些只以一个字母开头的单词.
没有单字母排除,它运行速度非常快:
time cat /usr/share/dict/web2 | cut -c 1-2 | tr '[a-z]' '[A-Z]' | uniq -c > /dev/null
real 0m0.227s
user 0m0.375s
sys 0m0.021s
Run Code Online (Sandbox Code Playgroud)
..然而,在' ' 上gre is很痛苦:
time cat /usr/share/dict/web2 | cut -c 1-2 | grep '..' | tr '[a-z]' '[A-Z]' | uniq -c > /dev/null
real 1m16.319s
user 1m0.694s
sys 0m10.225s
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我怎样才能"窃取"或将方法从一个类复制到另一个类?
示例代码:
class A(object):
def foo(self):
print "blah"
class B(object):
foo = A.foo
B().foo()
Run Code Online (Sandbox Code Playgroud)
预期产量:
"blah"
Run Code Online (Sandbox Code Playgroud)
代替:
TypeError:必须使用A实例作为第一个参数调用未绑定方法foo()(没有任何内容)
你怎么知道python是否已经用-i标志启动了?
根据文档,您可以检查os.environ中的PYTHONINSPECT变量,该变量相当于 -i.但显然它不会以同样的方式工作.
作品:
$ PYTHONINSPECT=1 python -c 'import os; print os.environ["PYTHONINSPECT"]'
Run Code Online (Sandbox Code Playgroud)
不起作用:
$ python -i -c 'import os; print os.environ["PYTHONINSPECT"]'
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我有一个脚本,如果某些条件失败,则调用sys.exit(-1).这很好,但有时我想使用-i手动调试它.我想我可以学习使用"PYTHONINSPECT = 1 python"而不是"python -i",但如果有一种通用的方法可以做到这一点会很好.
假设您要采用CMU的语音数据集输入,如下所示:
ABERRATION AE2 B ER0 EY1 SH AH0 N
ABERRATIONAL AE2 B ER0 EY1 SH AH0 N AH0 L
ABERRATIONS AE2 B ER0 EY1 SH AH0 N Z
ABERT AE1 B ER0 T
ABET AH0 B EH1 T
ABETTED AH0 B EH1 T IH0 D
ABETTING AH0 B EH1 T IH0 NG
ABEX EY1 B EH0 K S
ABEYANCE AH0 B EY1 AH0 N S
Run Code Online (Sandbox Code Playgroud)
(单词在左边,右边是一系列音素,在此处输入键)
您想将其用作机器学习系统的训练数据,该系统将使用新单词并猜测它们将如何用英语发音。
至少对我来说不是那么明显,因为没有固定大小的字母可以映射到音素。我觉得与马尔可夫链有关的事情可能是正确的方法。
你会怎么做?