存档

‘python’ 分类的存档

pip安装mysql-python报致命错误:my_config.h:没有那个文件或目录

2014年9月25日 没有评论

pip install mysql-python

没有找到my_config.h

你只需要在 yum install mysql-devel 就可以了

分类: python 标签:

python处理文本例子1

2014年5月13日 2 条评论

需求:

对一个配置文件进行处理,拿出可用的字符来拼接,下面是原始文本,我们要得到这样的结果,

redis -h 127.0.0.1 -p 6379 | select 2
redis -h 127.0.0.1 -p 6379 | select 16
redis -h 127.0.0.1 -p 6379 | select 8

原始文本:

上python

 

分类: python 标签: , , , ,

【Python 2.7/3.1 新特性】字典推导式(Dictionary comprehensions)

2014年4月29日 没有评论
在python 2.6.6 的python版本中字典不支持推导式,如果不方便升级python版本,下面有转换语句。

L = [1,2,3,4,5,6,7,8,9]

要生成下面这样的字典:

{1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}

以前需要这样:

dict([(v, v*10) for v in L])

现在可以直接这样:

{v: v*10 for v in L}

附录:

一、什么是字典?
字典是Python语言中唯一的映射类型。
映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。
字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。

字典类型与序列类型的区别:
存取和访问数据的方式不同。
序列类型只用数字类型的键(从序列的开始按数值顺序索引);
映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直接或间接地和存储数据值相关联。
映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。
映射类型用键直接“映射”到值。

字典是Python中最强大的数据类型之一。

二、如何创建字典和给字典赋值
简单地说字典就是用大括号包裹的键值对的集合。(键值对也被称作项)
一般形式:
adict = {}
adict = {key1:value2, key2:value2, …}
或用dict()函数,如,adict = dict() 或 adict = dict(([‘x’,1],[‘y’,2]))这样写对吗?adict = dict([‘x’,1],[‘y’,2])。关键字参数创建字典,如:adict= dict(name=’allen’,age=’40’)
或用fromkeys()方法,如,adict = {}.fromkeys((‘x’,’y’), -1) 这样创建的字典的value是一样的,若不给值,默认为None。
特点:
1、键与值用冒号“:”分开;
2、项与项用逗号“,”分开;
3、字典中的键必须是唯一的,而值可以不唯一。
adict = {‘name’:’allen’, ‘name’:’lucy’, ‘age’:’40’} 与 bdict = {‘name’:’allen’, ‘name2′:’allen’, ‘age’:’40’}
注意:如果字典中的值为数字,最好使用字符串数字形式,如:’age’:’040′ 而不用 ‘age’:040

三、字典的基本操作
1、如何访问字典中的值?
adict[key] 形式返回键key对应的值value,如果key不在字典中会引发一个KeyError。
2、如何检查key是否在字典中?
a、has_key()方法 形如:adict.haskey(‘name’) 有–>True,无–>False
b、in 、not in   形如:’name’ in adict      有–>True,无–>False
3、如何更新字典?
a、添加一个数据项(新元素)或键值对
adict[new_key] = value 形式添加一个项
b、更新一个数据项(元素)或键值对
adict[old_key] = new_value
c、删除一个数据项(元素)或键值对
del adict[key] 删除键key的项 / del adict 删除整个字典
adict.pop(key) 删除键key的项并返回key对应的 value值

四、映射类型操作符
标准类型操作符(+,-,*,<,>,<=,>=,==,!=,and,or, not)
a、字典不支持拼接和重复操作符(+,*)
b、字典的比较操作
先比较字典的长度也就是字典的元素个数
键比较
值比较
例子:
adict = {}
bdict = {‘name’:’allen’, ‘age’:’40’}
cmp(adict, bdict)  < –>-1 or > –>1 or ==  –>0

五、映射相关的函数
1、len() 返回字典的长度
2、hash() 返回对象的哈希值,可以用来判断一个对象能否用来作为字典的键
3、dict() 工厂函数,用来创建字典

六、字典的方法
1、adict.keys() 返回一个包含字典所有KEY的列表;
2、adict.values() 返回一个包含字典所有value的列表;
3、adict.items() 返回一个包含所有(键,值)元祖的列表;
4、adict.clear() 删除字典中的所有项或元素;
5、adict.copy() 返回一个字典浅拷贝的副本;
6、adict.fromkeys(seq, val=None) 创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(默认为None);
7、adict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None);
8、adict.has_key(key) 如果key在字典中,返回True,否则返回False。 现在用 in 、 not in;
9、adict.iteritems()、adict.iterkeys()、adict.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;
10、adict.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常;
11、adict.setdefault(key, default=None) 和set()方法相似,但如果字典中不存在Key键,由 adict[key] = default 为它赋值;
12、adict.update(bdict) 将字典bdict的键值对添加到字典adict中。

七、字典的遍历
1、遍历字典的key(键)
for key in adict.keys():print key
2、遍历字典的value(值)
for value in adict.values(): print value
3、遍历字典的项(元素)
for item in adict.items():print item
4、遍历字典的key-value
for item,value in adict.items(): print ‘key=%s, value=%s’ %(item, value)  或   for item,value in adict.iteritems(): print ‘key=%s, value=%s’ %(item, value)
注意:for item,value in adict.items(): print ‘key=%s’, ‘value=%s’, %(item, value) 这种写法是错误的

八、使用字典的注意事项
1、不能允许一键对应多个值;
2、键必须是可哈希的。

分类: python 标签:

python执行shell命令方法

2014年4月1日 没有评论

最近有个需求就是页面上执行shell命令,第一想到的就是os.system,

os.system('cat /proc/cpuinfo')

但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。

尝试第二种方案 os.popen()

output = os.popen('cat /proc/cpuinfo')
print output.read()

通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值)

尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。

(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output

Python Document 中给的一个例子,

>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

最后页面上还可以根据返回值来显示命令执行结果。

 

分类: python 标签:

[转]让python json encode支持 datetime类型

2014年3月13日 没有评论

转自:http://www.cnblogs.com/fengmk2/archive/2010/10/23/python-json-encode-datetime.html

python2.6+ 自带的json模块,不支持datetime的json encode,每次都需要手动转为字符串,很累人,我们可以自己封装一个简单的方法处理此问题. 实现代码如下:

分类: python 标签:

python读取数据库怎么把列名显示出来?

2014年3月13日 没有评论

分类: python 标签:

python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序

2014年3月12日 2 条评论

在windows上安装python mysql模块后,导入模块时报 python ImportError: DLL load failed: %1 不是有效的 Win32 应用程序

这个是因为你安装了64位的python,然后安装32位的mysql模块,或者你安装了32位的python,然后安装64位的myql模块

怎么查看自己的python是多少位?

C:\Users\ivon>python
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win
32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import MySQLdb

怎么看安装的模块是多少位?

MySQL-python-1.2.3.win-amd64-py2.7.exe

MySQL-python-1.2.5.win32-py2.7.exe

介个就很明显了。

分类: python 标签:

python os.path模块学习

2013年12月9日 1 条评论

os.path.abspath(path)

返回path规范化的绝对路径。

>>> os.path.abspath(‘test.csv’)

‘C:\\Python25\\test.csv’

>>> os.path.abspath(‘c:\\test.csv’)

‘c:\\test.csv’

>>> os.path.abspath(‘../csv\\test.csv’)

‘C:\\csv\\test.csv’

os.path.split(path)

将path分割成目录和文件名二元组返回。

>>> os.path.split(‘c:\\csv\\test.csv’)

(‘c:\\csv’, ‘test.csv’)

>>> os.path.split(‘c:\\csv\\’)

(‘c:\\csv’, ”)

 

os.path.dirname(path)

返回path的目录。其实就是os.path.split(path)的第一个元素。

>>> os.path.dirname(‘c:\\csv\test.csv’)

‘c:\\’

>>> os.path.dirname(‘c:\\csv’)

‘c:\\’

os.path.basename(path)

返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素。

>>> os.path.basename(‘c:\\test.csv’)

‘test.csv’

>>> os.path.basename(‘c:\\csv’)

‘csv’ (这里csv被当作文件名处理了)

>>> os.path.basename(‘c:\\csv\\’)

os.path.commonprefix(list)

返回list中,所有path共有的最长的路径。

如:

>>> os.path.commonprefix([‘/home/td’,’/home/td/ff’,’/home/td/fff’])

‘/home/td’

 

os.path.exists(path)

如果path存在,返回True;如果path不存在,返回False。

>>> os.path.exists(‘c:\\’)

True

>>> os.path.exists(‘c:\\csv\\test.csv’)

False

os.path.isabs(path)

如果path是绝对路径,返回True。

 

os.path.isfile(path)

如果path是一个存在的文件,返回True。否则返回False。

>>> os.path.isfile(‘c:\\boot.ini’)

True

>>> os.path.isfile(‘c:\\csv\\test.csv’)

False

>>> os.path.isfile(‘c:\\csv\\’)

False

 

os.path.isdir(path)

如果path是一个存在的目录,则返回True。否则返回False。

>>> os.path.isdir(‘c:\\’)

True

>>> os.path.isdir(‘c:\\csv\\’)

False

>>> os.path.isdir(‘c:\\windows\\test.csv’)

False

 

os.path.join(path1[, path2[, …]])

将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。

>>> os.path.join(‘c:\\’, ‘csv’, ‘test.csv’)

‘c:\\csv\\test.csv’

>>> os.path.join(‘windows\temp’, ‘c:\\’, ‘csv’, ‘test.csv’)

‘c:\\csv\\test.csv’

>>> os.path.join(‘/home/aa’,’/home/aa/bb’,’/home/aa/bb/c’)

‘/home/aa/bb/c’

 

os.path.normcase(path)

在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。

>>> os.path.normcase(‘c:/windows\\system32\\’)

‘c:\\windows\\system32\\’

os.path.normpath(path)

规范化路径。

>>> os.path.normpath(‘c://windows\\System32\\../Temp/’)

‘c:\\windows\\Temp’

 

os.path.splitdrive(path)

>>> os.path.splitdrive(‘c:\\windows’)

(‘c:’, ‘\\windows’)

os.path.splitext(path)

>>> os.path.splitext(‘c:\\csv\\test.csv’)

(‘c:\\csv\\test’, ‘.csv’)

 

os.path.getsize(path)
返回path的文件的大小(字节)。
>>> os.path.getsize(‘c:\\boot.ini’)
299L

分类: python 标签:

pip install python-ldap

2013年11月6日 没有评论

在centos 6 下安装python-ldap,报错:

因为一些函数是在OpenLDAP 2.4.x中加入的,而服务器上的版本为2.3.43。

解决办法:在ldap.h中加入4行

 

然后重新安装后正常
pip install python-ldap

分类: python 标签:

[转]python 查找IP地址归属地

2013年10月30日 没有评论

转自:http://www.oschina.net/code/snippet_168062_26009

 

分类: python 标签:

如何在vim中使用tab进行python代码补全

2013年10月24日 没有评论

代码地址:https://github.com/rkulla/pydiction

Install Details

If you have Pathogen installed:

Otherwise:

UNIX/LINUX: Put python_pydiction.vim in ~/.vim/after/ftplugin/ (If this directory doesn’t already exist, create it. Vim will know to look there automatically.)

WINDOWS: Put python_pydiction.vim in C:\vim\vimfiles\ftplugin (Assuming you installed Vim to C:\vim).

You may install the other files (complete-dict and pydiction.py) anywhere you want. For this example, we’ll assume you put them in “C:\vim\vimfiles\ftplugin\pydiction\” (Do not put any file but python_pydiction.vim in the ftplugin\ directory, only .vim files should go there.)

 

在 UNIX/LINUX 下,将 python_pydiction.vim 放入 ~/.vim/after/ftplugin/ ,若该目录不存在则手动创建,Vim 会自动去该目录下查找相关文件。不要把除 python_pydiction.vim 之外的其他文件放入该目录。

在你的 vimrc 文件中增加下面的字段来启用 ftplugins : (vimrc你可以find下在哪个路径,一般在/etc/vimrc)
filetype plugin on
之后确保设置 “g:pydiction_location” 指向你放置的 complete-dict 文件所在的全路径,例如
let g:pydiction_location =’/root/.vim/bundle/pydiction/complete-dict’

 

Configuring

In your vimrc file, first add the following line to enable filetype plugins:

filetype plugin on
then make sure you set “g:pydiction_location” to the full path of where you installed complete-dict, i.e.:

You can optionally set the height of the completion menu by setting “g:pydiction_menu_height” in your vimrc. For example:

示例图:

分类: python 标签:

[python]列表操作方法append extend insert remove pop index count sort reverse

2013年7月9日 没有评论

已知列表: a = [1,2,3,4,5]

python list 索引:
列表索引的下标默认是从第0个开始的,比如我们需要获取第1个元素1,那我们可以用a[0].如果需要获取
最后一个元素,那可以通过a[-1]。

1 append()方法
向列表的尾部插入数据,有点像push操作,它可以push大部分数据,比如数字,字符串到列表里,
比如:
a.append(6)
a.append(7)
a.append([1,3])

如果你要进行列表的合并的话,用下面的extend方法
2 extend()方法
b = [‘a’,’b’]
a.extend(b)
print a
输出列表a的结果是[1,2,3,4,5,a,b]

3 insert()方法
insert 是想前面插入数据,插入数据时必须标注插入位置,比如下面的1 66 ,1就是列表位置,66是数据。
a.insert(1,66)
输出结果是[1, 66, 2, 3, 4, 5, ‘a’, ‘b’]

4 remove()方法
a.remove(66)
输出的结果是:[1, 2, 3, 4, 5, ‘a’, ‘b’]

删除列表里面指定的值,如果没有的话,报错:
Traceback (most recent call last):
File “”, line 1, in
ValueError: list.remove(x): x not in list

4 pop方法
a.pop()
输出的结果是’b’
a.pop(2)
输出的结果是3
如果你没有指定参数的话,默然是返回列表的最后一个字符,如果指定的话,返回当前指定的索引的值,使用pop后,列表中会删除该值

5 index方法
a.index(2)
打印该值在列表中的位置,发现了一个很奇怪的问题,我直接输出a.index(0)就会报错,因为index方法在取值的时候,有个判断元素是否存在,如果不存在则抛出异常。

6 python列表查找
我们可以通过in的方法来进行查找。如果需要查找的值在列表里,则返回true,否则返回false

7 判断python列表为空:
判断列表为空有两种方法,一个是通过len(列表),然后看返回结果,还有一个是通过if 判断,如果是空列表,则返回false

8 python 列表长度:
通过len(列表)就可以得到结果

9 python 列表变量循环:
直接用for in 迭代列表输出就行。

10 python 列表随机选值:
可以通过import random模块,然后随机生成一个整数,在到列表里面去取数据,但是如果超过索引范围,则会报错。

11 python 列表排序:
直接通过列表自身的sort()方法就能对列表进行排序,注意这个方法返回none,是原地的修改列表

12count()方法
返回一个字符在列表出现的次数
a.count(1)
输出的结果是2
如果是a.count(0)
返回的结果是0
所以它的意思是字符串存在列表当中的话,返回它出现的次数,如果字符不存在列表当中的话,返回0
13 sort()方法
对列表里的元素进行从小到大的排序
a.sort()
输出的结果是[1, 1, 2, 3, 4]
14 reverse()方法
对列表里的数据进行翻转显示
输出的结果是:[4, 3, 2, 1, 1]

分类: python 标签:

[转]4行python代码,删除svn文件夹

2013年7月5日 没有评论

svn很好用,但是如果要删除svn文件夹的绑定是个很麻烦的事情,每个目录下都有.svn的文件夹,必须全部删掉才行。手动删除费时费力,一般都写段脚本搞定,不过网上搜索出来的python脚本都太冗长了,一点也体现不出python的优势。如下,网上搜索到得代码:

其中实现功能的核心代码写得太过冗长,其实很简单的4行代码就能达到目的,如下:

转自:http://www.cnblogs.com/Alexander-Lee/archive/2010/02/23/1671905.html

分类: python 标签:

Web 服务器框架Tornado安装

2013年7月5日 没有评论

 

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)

请参见 Tornado 文档 或 Tornado 原文文档(镜像)以详细了解该 Web 框架。

 

下载和安装

 

自动安装: Tornado 已经列入 PyPI ,因此可以通过 pip 或者 easy_install 来安装。如果你没有安装 libcurl 的话,你需要将其单独安装到系统中。请参见下面的安装依赖一节。注意一点,使用 pip 或 easy_install 安装的 Tornado 并没有包含源代码中的 demo 程序。

手动安装: 下载地址:wget https://pypi.python.org/packages/source/t/tornado/tornado-3.1.tar.gz

 

Tornado 的代码托管在 GitHub 上面。对于 Python 2.6 以上的版本,因为标准库中已经包括了对 epoll 的支持,所以你可以不用 setup.py 编译安装,只要简单地将 tornado 的目录添加到 PYTHONPATH 就可以使用了。

安装需求

Tornado 在 Python 2.5, 2.6, 2.7 中都经过了测试。要使用 Tornado 的所有功能,你需要安装 PycURL (7.18.2 或更高版本) 以及 simplejson (仅适用于Python 2.5,2.6 以后的版本标准库当中已经包含了对 JSON 的支持)。为方便起见,下面将列出 Mac OS X 和 Ubuntu 中的完整安装方式:

Mac OS X 10.6 (Python 2.6+)

 

Ubuntu Linux (Python 2.6+)

 

Ubuntu Linux (Python 2.5)

 

Hello, world

以下是经典的 “Hello, world” 示例:

 

分类: python 标签:

ImportError: No module named mime.text

2013年6月21日 没有评论

生成环境的一个python脚本执行报错,老版本python中MIMEText 写法不对

修改为下面这样写法ok

 

分类: python 标签:

Centos 5 python升级

2013年3月29日 没有评论

yum 在线升级python

1.查看目前的python版本

阅读全文…

分类: python 标签: ,

centos6 下安装MySQL-python

2013年3月17日 没有评论

如果你服务器环境允许yum,安装MySQL-python模块就很简单了

 当然也可以源码安装该模块

首先安装 setuptools,下载源代码包:

阅读全文…

分类: python 标签: