标签:成员 space dir split 情况下 flush call code 列表
2011年4月3日
在 CentOS 5.5 上通过 setup.py 安装了一个软件包。删除的时候发现 setup.py 没有 uninstall 选项。
在网上找了个简单的方法,2 个步骤可轻松完成卸载:
* 增加 –record 参数重新安装软件包,执行命令:
# python ./setup.py install --record install.txt
* 删除安装文件,执行命令:
# cat install.txt | xargs rm -rf
sudo python ./setup.py install
sudo python ./setup.py install --record install.txt ; cat install.txt | xargs rm -rf
命令行下查看python和numpy的版本和安装位置
1、查看python版本
方法一:
python -V
注意:‘-V‘中‘V’为大写字母,只有一个‘-’
方法二:
python --version
注意:‘--version‘中有两个‘-’
2、查看python安装位置
方法一:
python -c "import sys; print sys.executable"
方法二:
python -c "import os; print os.sys.executable"
python -c "import os; path = os.sys.executable;folder=path[0 : path.rfind(os.sep)]; print folder"
3、查看Numpy版本
python -c "import numpy; print numpy.version.version"
或
python -c "import numpy; print numpy.__version__"
4、查看Numpy安装路径
python -c "import numpy; print numpy.__file__"
python中
a=0
if a: #这个条件为假
xxx
用filter过滤 list 中的某些值
a = [1,1,1,2,3]
如果想把1去掉:
a = filter(lambda x: x != 1, a)
遍历字典dict
a = {1:’a’,2:’b’}
[(k,v) for (k,v) in a.items()]
int最大值
import sys
sys.maxint
解析URL参数
import urlparse
url = ‘http://www.x.com/login.html?password=123456&usrname=pan‘
rs = urlparse.urlparse(url)
q = urlparse.parse_qs(rs.query)
print q?
查找字符串
a = ‘asdf’
a.find(‘sd’),返回1,字符串从0开始编码
如果没有找到,返回-1
正则表达式
m = re.search("(book)+","mebookbookme")
m.group()
http://www.cnblogs.com/wei-li/archive/2012/05/16/2505503.html
字典按照key或者value排序
cc_diff = sorted(cc_diff.items(), key=lambda (k, v): v, reverse=True)
最后cc_diff是一个(k,v)的list
判断文件是否存在
if not os.path.exists(‘img_xiachufang_list.txt‘):
unicode和utf-8编码
在CentOs上的系统环境是utf-8,但是从互联网上抓取下来的html文本是unicode编码,所以在使用之前全部通过u’some message’.encode(‘utf8)
默认情况下 ‘123’ + u’abc’会报错
一般情况下都是在同一种编码,比如utf-8下进行字符串之前的+操作,如果需要在+操作的时候自动将utf-8转换成unicode的话,可以使用
import sys
reload(sys)
sys.setdefaultencoding(‘utf8‘)
python的”main”函数
#hello.py
def foo():
str="function"
print(str);
if __name__=="__main__":
print("main")
foo()
查询类的所有属性
class foo():
a=1
print vars(foo)
数组分片
a = [1,2,3,4]
注意 “:” 是位置的分隔符,x:y代表[x,y)这一段元素,二在numpy中,:代表的是所有的行或者列
a[:]全部元素
a[:3]前3个元素
a[1:3] 第1、2两个元素,所以从0开始
子模块引用上级模块
如果直接运行子模块,需要向sys.path中添加子模块父目录
from os import listdir
from os.path import abspath, isfile, isdir, join, dirname
import sys
file_parts = dirname(abspath(__file__)).split(‘/‘)
parent_path = ‘/‘.join(file_parts[:len(file_parts)-1])
print parent_path
sys.path.append(parent_path)
当前模块绝对路径
import os
print os.path.abspath(__file__) // 文件绝对路径
print os.path.dirname(os.path.abspath(__file__)) //文件所在目录
文件或者目录是否存在
if os.path.exists(‘/usr/local/bin’)
创建目录
os.mkdir(‘xiachufang/machine_group’)’
命令行参数
import sys
print ‘参数个数为:‘, len(sys.argv), ‘个参数。‘
print ‘参数列表:‘, str(sys.argv)
测试:
$ python test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: [‘test.py‘, ‘arg1‘, ‘arg2‘, ‘arg3‘]
去掉空白符
a = ‘1 2 3 (tab) 4 ‘
a = re.sub(‘\s+’, ‘’, a)
找到list中指定元素的下表
a = [11, 22, 33]
a.index(22)返回1
class的成员和对象的成员
test.py中有如下代码:
class Kls(object):
no_init = 0
def __init__(self):
self.no_init = self.no_init + 100
Kls.no_init += 1
print self.no_init
print Kls.no_init
if __name__ == "__main__":
init1 = Kls()
init2 = Kls()
运行python test.py输出为:
100
1
101
2
值得说明的是,在class中声明的属性,对象实例第一次引用的时候是取的类的属性,一旦对象的属性进行了操作,比如init1.no_init += 123,则no_init属性就会脱离类而附着于对象之上。对象是无法改变类的属性值的。对于这个例子,Kls.no_init两次分别累加1,而对于init1,在初始化的时候使用了类的属性值Kls.init=0,所以累加100之后init1.no_init=100,之后类的属性值+1,Kls.no_init=1;然后init2初始化的时候,第一次引用了类的属性值Kls.no_init=1,再累加100,最后init2.no_init=101,后面类的属性值+1,则Kls.no_init = 2
@classmethod和@staticmethod装饰器
@classmethod修饰的方法,无论是类访问还是实例访问,修改的属性都是类属性,默认转入类
@staticmethod修饰的方法,和类已经没有关系了,默认不传入任何参数,操作的是一些固有存在的变量,比如环境变量
例子,test.py中
class Kls1:
no_init = 0
def __init__(self):
Kls1.no_init += 1
def printd(self):
print self.no_init
@classmethod
def cmethod(*args):
print args
@staticmethod
def smethod(*args):
print args
if __name__ == "__main__":
init1 = Kls1()
init2 = Kls1()
init1.cmethod(123123)
init1.smethod(123123)
init1.printd()
print ‘-------------------‘
Kls1.cmethod()
Kls1.smethod()
Kls1.printd()
运行python test.py得到:
(<class __main__.Kls1 at 0x1029a60b8>, 123123)
(123123,)
2
-------------------
(<class __main__.Kls1 at 0x1029a60b8>,)
()
Traceback (most recent call last):
File "test.py", line 74, in <module>
Kls1.printd()
TypeError: unbound method printd() must be called with Kls1 instance as first argument (got nothing instead)
stdout立即刷新,尤其是在重定向的时候
sys.stdout.flush()
unicode转utf8
u’123’.encode(‘utf8)
utf8转unicode
‘123’.deocde(‘utf8’)
计算MD5
import md5
def GetStringMD5(str):
m = md5.new()
m.update(str)
return m.hexdigest()
Python的模块引用和查找路径http://www.cnblogs.com/qingspace/p/5284480.html
import sys
print sys.path
获取当前时间戳
import time
from datetime import datetime, timedelta, date
created = datetime.now()
created = int(time.mktime(created.timetuple()))
使用map
a=[‘1’,’2’]
map(int, a)
返回[1,2]
map(func, a)会将a中的每个元素都用func来作用一下,最后的结果放到一个list中
python中对象的拷贝和引用
参考:https://my.oschina.net/leejun2005/blog/145911
不可变对象包括int,float,long,str,tuple等
可变对象包括list,set,dict等
需要注意的是:这里说的不可变指的是值的不可变
对于不可变对象的赋值,比如a=’123’,然后让a = ‘qwe’,那么会重新生成一个字符串对象,并把a这个标签从’123’上撕下来贴到’qwe’上
对于可变对象a = [1,2,3], b = [] 然后 a = b 只是把a贴到[]上而已
浅拷贝和深拷贝
a = [1,2,3]
a[1] = a
print a
输出[1, [...], 3]
这是因为
而
a = [1,[11,22,33],3]
b = a[:] # 浅拷贝
a[0] = 9
b[1][1] = 777
print a, b
结果
a = [9,[11,777,33],3]
b = [1,[11,777,33],3]
原理
import copy
a = [0, [1, 2], 3]
b = copy.deepcopy(a)
a[0] = 8
a[1][1] = 9
结果
>>> a
[8, [1, 9], 3]
>>> b
[0, [1, 2], 3]
引用 VS 拷贝:
(1)没有限制条件的分片表达式(L[:])能够复制序列,但此法只能浅层复制。
(2)字典 copy 方法,D.copy() 能够复制字典,但此法只能浅层复制
(3)有些内置函数,例如 list,能够生成拷贝 list(L)
(4)copy 标准库模块能够生成完整拷贝:deepcopy 本质上是递归 copy
(5)对于不可变对象和可变对象来说,浅复制都是复制的引用,只是因为复制不变对象和复制不变对象的引用是等效的(因为对象不可变,当改变时会新建对象重新赋值)。所以看起来浅复制只复制不可变对象(整数,实数,字符串等),对于可变对象,浅复制其实是创建了一个对于该对象的引用,也就是说只是给同一个对象贴上了另一个标签而已。
urllib下载图片
def download_image(url):
# print ‘task begin‘, url
r = requests.Session()
r.keep_alive = False
try:
image = r.get(url, stream=True, verify=False)#, timeout=10)
except Exception as e:
print e
print url
return None
# print ‘done‘
if image.status_code == 200:
return image.content
return None
计算程序运行时间
import time
start = time.time()
... do something
elapsed = (time.time() - start)
获取当前进程pid
os.getpid()
获取当前时间
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
import time
time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time()))
yield 使用
参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
用 pip 在指定路径下安装软件
pip install -t /usr/local/Python-2.7.13/lib/python2.7/site-packages tornado
查看django版本
import django
django. VERSION
查看python中Unicode字符串的编码
s = "高德路"
# 把字符串s编码成unicode
st = s.encode(‘unicode_escape‘)
>>> print(st)
b‘\\u9ad8\\u5fb7\\u8def‘
2018年3月28日18:13:49 —— 执行Python命令的时候,将文件的编码(比如utf-8)转换到python内部编码(比如Unicode)时,使用的“我(python)认为文件应该是这样的编码”是本地编码,用如下命令得到:
import locale
locale.getpreferredencoding()
标签:成员 space dir split 情况下 flush call code 列表
原文地址:https://www.cnblogs.com/longjmp/p/9784825.html