码迷,mamicode.com
首页 > 编程语言 > 详细

python 学习

时间:2018-10-14 01:59:46      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:成员   space   dir   split   情况下   flush   call   code   列表   

删除 setup.py 安装的 Python 软件包

201143

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

 

 

命令行下查看pythonnumpy的版本和安装位置

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‘):

 

unicodeutf-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] 12两个元素,所以从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,之后类的属性值+1Kls.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()

 

unicodeutf8

u’123’.encode(‘utf8)

 

utf8unicode

‘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

不可变对象包括intfloatlongstrtuple

可变对象包括listsetdict

需要注意的是:这里说的不可变指的是值的不可变

 

对于不可变对象的赋值,比如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)

 

4copy 标准库模块能够生成完整拷贝: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

 

查看pythonUnicode字符串的编码

s = "高德路"

# 把字符串s编码成unicode

st = s.encode(‘unicode_escape‘)

>>> print(st)

b‘\\u9ad8\\u5fb7\\u8def‘

 

 

201832818:13:49 —— 执行Python命令的时候,将文件的编码(比如utf-8)转换到python内部编码(比如Unicode)时,使用的“我(python)认为文件应该是这样的编码”是本地编码,用如下命令得到:

import locale
locale.getpreferredencoding()

 

 

 

python 学习

标签:成员   space   dir   split   情况下   flush   call   code   列表   

原文地址:https://www.cnblogs.com/longjmp/p/9784825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!