小编m9_*_*psy的帖子

如何将DataFrame写入postgres表?

DataFrame.to_sql方法,但它只适用于mysql,sqlite和oracle数据库.我不能传递给这种方法postgres连接或sqlalchemy引擎.

python postgresql sqlalchemy pandas

74
推荐指数
4
解决办法
8万
查看次数

python 3中的pickle和_pickle有什么区别?

我是python的新手,想要实现快速对象序列化.我试图使用json,但它太慢了,也试图使用马歇尔模块,但是由马歇尔序列化的对象大小比pickle多6-7倍,所以我决定在我的项目中使用pickle.我读了一下cPickle模块,读得很快,但python 3中没有这样的模块,docs说名为_pickle的模块是用C语言编写的.所以在我的项目中我使用

import _pickle as pickle
Run Code Online (Sandbox Code Playgroud)

pickle和_pickle之间有什么区别吗?我如何实现更快的对象序列化/反序列化?

python serialization python-3.x

29
推荐指数
2
解决办法
1万
查看次数

字节码优化

这里有两个简单的例子.在第一个示例中,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)

python

10
推荐指数
1
解决办法
2147
查看次数

如何从pdf文件中提取所有链接?

按标准,链接隐藏在注释中(规范部分12.5.6.5).从那里提取地址很容易:使用Python或其他方法从PDF中提取指向另一个PDF中页面的链接 但是链接的呈现方式不像文档中的特殊对象,而是像" http:// blah-blah "这样的纯文本. com ".如何不仅从注释中提取链接,还从文本本身提取链接?我可以搜索整个文本并找到像"http://"这样的单词,但是有更优化的解决方案吗?PDF编辑也突出显示文本链接,他们怎么知道这段文字是超链接?

python pdf pypdf

9
推荐指数
2
解决办法
1万
查看次数

简单的ping实现

我需要简单的ping,如果目标无法访问,将返回一些浮点数或无.我使用的是Python 3和Windows,并且不想使用标准ping,因为我必须从shell解码字节并解析结果.我对ICMP协议的实现一无所知,所以准备使用库是最好的选择.

python networking ping python-3.x

2
推荐指数
1
解决办法
2万
查看次数

为什么我不能使用自定义选择的属性?

我试图在我的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)

html javascript jquery

1
推荐指数
1
解决办法
73
查看次数

将redis中的列表存储得比许多密钥更有效吗?

假设我有很多(数千万)这样的键:A_1,A_2,A_3等; B_1,B_2等.值都是短的int数.现在我分别存储所有这些键,性能非常好,但是我有巨大的内存开销.没有足够的12 Gb RAM,我需要十倍以上.我想,我可以使用列表并存储类似的东西:key:A,list:[1,2,3,...].我可以使用这种方法赢得一些内存吗?

redis

1
推荐指数
1
解决办法
1204
查看次数

Python会自动用<< 1替换*2吗?

我看到了建议(参见例如,在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)

python cpython python-3.x python-internals

1
推荐指数
1
解决办法
100
查看次数

如何获得可变字符串?

我正在生成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做到这一点?

python python-3.x

0
推荐指数
1
解决办法
1865
查看次数

为什么10 // .01 = 999.0?

为什么不1000?结果是float,因为PEP238中的" 真正分裂语义 " ,但是.这令人困惑.我有这样的假设,实际答案就像999.9999999123564384,但如何检查呢?和BTW.math.float(999.999999999999999) = 100010 / .01 = 1000.0

python python-3.x

-2
推荐指数
1
解决办法
111
查看次数