有DataFrame.to_sql方法,但它只适用于mysql,sqlite和oracle数据库.我不能传递给这种方法postgres连接或sqlalchemy引擎.
我是python的新手,想要实现快速对象序列化.我试图使用json,但它太慢了,也试图使用马歇尔模块,但是由马歇尔序列化的对象大小比pickle多6-7倍,所以我决定在我的项目中使用pickle.我读了一下cPickle模块,读得很快,但python 3中没有这样的模块,docs说名为_pickle的模块是用C语言编写的.所以在我的项目中我使用
import _pickle as pickle
Run Code Online (Sandbox Code Playgroud)
pickle和_pickle之间有什么区别吗?我如何实现更快的对象序列化/反序列化?
这里有两个简单的例子.在第一个示例中,append
方法在循环内生成LOAD_ATTR指令,在第二个示例中,它只生成一次,结果保存在变量中(即缓存).提醒:我记得,extend
这个任务的方法要快得多
setup = \
"""LIST = []
ANOTHER_LIST = [i for i in range(10**7)]
def appender(list, anohter_list):
for elem in anohter_list:
list.append(elem)
def appender_optimized(list, anohter_list):
append_method = list.append
for elem in anohter_list:
append_method(elem)"""
import timeit
print(timeit.timeit("appender(LIST, ANOTHER_LIST)", setup=setup, number=10))
print(timeit.timeit("appender_optimized(LIST, ANOTHER_LIST)", setup=setup, number=10))
Run Code Online (Sandbox Code Playgroud)
结果:
11.92684596051036
7.384205785584728
Run Code Online (Sandbox Code Playgroud)
4.6秒差异(即使是这么大的名单)也不是开玩笑 - 我认为这种差异不能算作"微优化".为什么Python不为我做这件事?因为字节码必须是源代码的精确反映?编译器甚至优化任何东西?例如,
def te():
a = 2
a += 1
a += 1
a += 1
a += 1
Run Code Online (Sandbox Code Playgroud)
产生
LOAD_FAST 0 (a)
LOAD_CONST 2 (1)
INPLACE_ADD
STORE_FAST …
Run Code Online (Sandbox Code Playgroud) 按标准,链接隐藏在注释中(规范部分12.5.6.5).从那里提取地址很容易:使用Python或其他方法从PDF中提取指向另一个PDF中页面的链接 但是链接的呈现方式不像文档中的特殊对象,而是像" http:// blah-blah "这样的纯文本. com ".如何不仅从注释中提取链接,还从文本本身提取链接?我可以搜索整个文本并找到像"http://"这样的单词,但是有更优化的解决方案吗?PDF编辑也突出显示文本链接,他们怎么知道这段文字是超链接?
我需要简单的ping,如果目标无法访问,将返回一些浮点数或无.我使用的是Python 3和Windows,并且不想使用标准ping,因为我必须从shell解码字节并解析结果.我对ICMP协议的实现一无所知,所以准备使用库是最好的选择.
我试图在我的HTML中使用自定义"selected"属性,jQuery总是返回此属性的错误值.我知道,"selected"在options标签中使用,但为什么我不能在其他标签中使用它?只看例子:http://jsfiddle.net/SE7FB/8/
<div class="category" selected="false">First</div>
<div class="category" selected="false">Second</div>
<div id="tester" style="width: 100px; height: 100px; float: right; background-color: black;"></div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$(".category").click(function () {
$("#tester").css("background-color", "rgb(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ")");
$("#tester").append("<p>" + $(this).attr("selected") + "</p>");
if ($(this).attr("selected") == "true") {
$(this).css("background-color", "transparent");
$(this).attr("selected", "false");
} else if ($(this).attr("selected") == "false") {
$(this).css("background-color", "blue");
$(this).attr("selected", "true");
}
});
Run Code Online (Sandbox Code Playgroud) 假设我有很多(数千万)这样的键:A_1,A_2,A_3等; B_1,B_2等.值都是短的int数.现在我分别存储所有这些键,性能非常好,但是我有巨大的内存开销.没有足够的12 Gb RAM,我需要十倍以上.我想,我可以使用列表并存储类似的东西:key:A,list:[1,2,3,...].我可以使用这种方法赢得一些内存吗?
我看到了建议(参见例如,在C中使用移位运算符进行乘法和除法实际上更快吗?),你不应该用移位运算符手动替换乘法,因为编译器必须自动执行,移位运算符会降低可读性.我写了一个简单的测试来检查这个:
import numpy as np
import time
array1 = np.random.randint(size=10 ** 6, low=0, high=10 ** 5)
array2 = np.zeros((10 ** 6,), dtype=np.int)
total = 0.0
for i in range(100):
start = time.clock()
for j in range(len(array2)):
array2[j] = array1[j] * 2
total += time.clock() - start
print("*2 time = " + str(round(total / 10, 5)) + " ms")
total = 0.0
for i in range(100):
start = time.clock()
for j in range(len(array2)):
array2[j] = array1[j] << 1
total …
Run Code Online (Sandbox Code Playgroud) 我正在生成sql查询并在我的字符串上执行了很多+ =操作.看起来像:
insert_string = 'INSERT INTO ' + table_name + ' VALUES '
for row in data_frame.iterrows():
raw_row = row[1].values
insert_string += str(tuple(raw_row))
Run Code Online (Sandbox Code Playgroud)
因此,如果我的insert_string是不可变的,则每个+ =操作都会创建新的字符串.例如,在C#中有StringBuilder类,可以初始化具有给定容量的空字符串.我怎么能用Python做到这一点?
为什么不1000?结果是float
,因为PEP238中的" 真正分裂的语义 " ,但是.这令人困惑.我有这样的假设,实际答案就像999.9999999123564384,但如何检查呢?和BTW.math.float(999.999999999999999) = 1000
10 / .01 = 1000.0
python ×8
python-3.x ×5
cpython ×1
html ×1
javascript ×1
jquery ×1
networking ×1
pandas ×1
pdf ×1
ping ×1
postgresql ×1
pypdf ×1
redis ×1
sqlalchemy ×1