python直接下载图片到内存

1. 使用 requests(推荐)

2. 使用 StringIO

3. 使用 io.BytesIO

参考链接


python直接下载图片到内存

获取当前Python中site-packages的具体存放路径

很多时候,我们系统上安装了好几个版本的 Python, 此时,我们往往没办法确定通过 pip安装的包会存放到那个目录下的 site-packages中,可以通过如下代码获取:

 

Ubuntu 16.04 LTS上使用Python3版本的PIP

Ubuntu 16.04 LTS上使用 Python2Python3是共存的,而且默认使用 Python2,如果使用 Python3则需要明确指定。

1.安装 Python3版本的 PIP

2.安装 Python3版本的 NumPy

3.安装 Python3版本的 OpenCV

注意,目前的 Python3版本的 OpenCV是不支持 cv2.imshow()的,具体查看https://pypi.python.org/pypi/opencv-python,可以看到如下信息:

Python 2.7 基于twisted实现简单的web服务器

Python 2.7自带的 SimpleHTTPServer默认是 HTTP/1.0,导致在投放简单的视频的时候,一般是无法通过 FFMPEG进行播放的,主要是 HTTP/1.0不支持 Content-Range导致无法快进以及视频的 Seek操作。并且比较悲剧的是,如该修改成 HTTP/1.1协议,默认只有一个连接在处理,导致只要第一个用户不断开,第二个连接基本上连接不上。

网上搜索了以下,找到了用 twisted代码来实现比较简单,并且性能还不错的服务器。

本文实例讲述了 Python基于 twisted实现简单的 web服务器,分享给大家供大家参考。具体方法如下:
1.首先是通过 PIP安装 twisted

2. 新建 htm文件夹,在这个文件夹中放入显示的网页文件

3. 在 htm文件夹的同级目录下,建立 web.py,代码如下:

执行脚本

然后浏览器访问:http://127.0.0.1:1234/就可以看到内容了。

参考链接


Python基于twisted实现简单的web服务器

macOS Sierra (10.12.4)下Caffe执行Python代码报告错误“Mean shape incompatible with input shape”

在执行macOS Sierra (10.12.4)下Caffe通过Python接口加载binaryproto格式的均值文件的时候,最后报告错误:

这个错误发生的原因是由于 memnet提供的均值文件是 256*256的,但是提供的配置文件却是 227*227的,导致在 io.py里面的代码在进行判断的时候发生异常。调整源代码中的 python/caffe/io.py里面的代码:

调整为:

调整完成后,需要重新编译 Caffe:

参考链接


macOS Sierra (10.12.4)编译pycaffe成功后,执行时候崩溃,错误“Segmentation fault: 11”

参照macOS Sierra (10.12.3)编译Caffe编译成功 Caffe后,开始尝试使用 CaffePython接口,执行如下命令:

编译一切成功,但是当执行

的时候,程序崩溃,提示如下内容:

继续阅读macOS Sierra (10.12.4)编译pycaffe成功后,执行时候崩溃,错误“Segmentation fault: 11”

macOS Sierra (10.12.4)下Python通过PyAV调用FFMPEG操作视频

macOS Sierra ( 10.12.4)下使用 Python操作视频, FFMPEG是目前来说最好的一个选择,但是没有为 Python专门提供适配接口,网上搜索了比较长时间,才找到 PyAV来操作 FFMPEG

PyAV的文档地址在:https://mikeboers.github.io/PyAV/

代码地址在:https://github.com/mikeboers/PyAV

首先需要通过 HomeBrew安装 FFMPEG

接下来安装 PyAV,安装方式两种:

一种是直接通过 PIP来安装:

另外一种是通过下载代码来手工安装

安装好后的例子如下:

Python实现抓取CSDN首页文章列表

1.使用工具:

2.抓取网站:
csdn首页文章列表 http://blog.csdn.net/
3、实现代码:

4.执行脚本

继续阅读Python实现抓取CSDN首页文章列表

UTF8 + BOM产生问题与小结

写python脚本的时候发现这样一个问题:从xls文件导出到txt时,无法直接转换为int型数据,输出查看发现和文件编码方式产生的附加信息有关用一个简单的文件举例

当文件分别用ascii,utf8,utf8+bom作为编码格式时,显示输出结果如下:

使用ascii编码的输出:

使用utf8编码的输出:

使用bom编码的输出:

原来utf8+bom不能直接转换int的原因在这里,它在文件头插入了一个表示文件编码的信息\xef\xbb\xbf,那么UTF-8(无BOM)和UTF-8这两个有什么区别呢?BOM是什么呢?

什么是BOM?

BOM: Byte Order Mark

UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上的

BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。

Byte Order Marks are special characters at the beginning of a Unicode file to indicate whether it is big or little endian, in other words does the high or low order byte come first. These codes also tell whether the encoding is 8, 16 or 32 bit. You can recognise Unicode files by their starting byte order marks, and by the way Unicode-16 files are half zeroes and Unicode-32 files are three-quarters zeros. Unicode Endian Markers

Byte-order mark Description
EF BB BF UTF-8
FF FE UTF-16 aka UCS-2, little endian
FE FF UTF-16 aka UCS-2, big endian
00 00 FF FE UTF-32 aka UCS-4, little endian.
00 00 FE FF UTF-32 aka UCS-4, big-endian.

UTF的字节序和BOM

UTF- 8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到 一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是 “乙”?

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:

在 UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

原来BOM是在文件的开始加了几个字节作为标记。有了这个标记,一些协议和系统才能识别。

ok,说了这么多背景,那么如何解决这个问题呢?

如何使用BOM头

BOM头的删除

对UTF-16, Python将BOM解码为空字串。然而对UTF-8, BOM被解码为一个字符,如例:

简单的做法是在文件读入时使用

即可,具体可以参见[http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig|http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig]

或者:

BOM头的添加

参考 http://www.cnblogs.com/DDark/archive/2011/11/28/2266085.html

python下的编码检测——chardet

在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。

chardet 是python的第三方库,需要下载和安装。现在 pip 已经可以很好的支持这个版本的下载了,建议使用pip 安装,关于pip 的安装部分,可以参考Windows下python的包管理器pip安装
在安装完chardet模块,我就可以使用它了,来看一段示例代码。
运行结果表示有99%的概率认为这段代码是GB2312编码方式。
另外一个相对高级的应用。

应用背景,如果要对一个大文件进行编码识别,使用这种高级的方法,可以只读一部,去判别编码方式从而提高检测速度。

参考 http://blog.csdn.net/aqwd2008/article/details/7506007