python使用总结

包管理

使用pip,安装pip

http://www.runoob.com/w3cnote/python-pip-install-usage.html

升级pip  python -m pip install --upgrade pip

安装权限不够的问题

sudo pip install networkx --user

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py  # 下载安装脚本

$ sudo python get-pip.py    # 运行安装脚本

忽略某个库的版本更新

sudo pip install wechatpy[cryptography] --ignore-installed python-dateutil

python-dateutil在python的/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python目录下,有一个1.5的版本,卸载使用sudo权限都不够

1.python代码库,有很多开源的代码

https://pypi.python.org/pypi?%3Aaction=search&term=win32all&submit=search

如果出现错误:error: Unable to find vcvarsall.bat

则: SET VS90COMNTOOLS=%VS100COMNTOOLS%

2.shell启动python脚本

#!/bin/bash

python recv.py

如果要以后台形式运行,使用nohup python3 run.py >/dev/null 2>&1

3.print占位符

print ('hello %s age %d' %(self.__name, self.__age))

print ('hello age %d ' %(self.__age))

4. 开发工具

安装的时候选择 注册环境变量,这样在控制台命令窗口才能运行.py文件

  最好用的IDE,还是VS, 我使用的是VS2010,所以下载了PTVS 2.1 VS 2010插件,需要安装.net  framework 4.5

  可以像VS那样设置断点,调试,查看变量和堆栈 

使用Eclipse插件时,创建的工程,当前目录是以工程目录.pydevproject,.project开始的

mac下安装VSCode默认使用的是python3,如果要使用python2.7则在setting中添加python2.7的路径: python.pythonPath

验证方法

import platform

print(platform.python_version())

5. input() 和raw_input()

input 会假设用户输入的是合法的表达式(如果要输入字符串,我们得加上引号);而 raw_input 会假设输入的都是原始数据(字符串);

6. 字符串多行显示 首位添加 '''

7.多行字符串一行显示 ,使用\连接

8. 原始字符串

原始字符串不会把反斜杆当作特殊字符使用

path = r"C:\xiaoyu"

print path

取子串

test = text[0 : -1] 会少一位字符,取当前索引之后的整个子串

test = text[index : len(text)]

9. 解决中文错误

SyntaxError: Non-ASCII character '\xd6' in file ChineseTest.py

在文件的第一行加上#coding=gbk

10.判断是否是类的属性

(1)class student:

name = ''

#判断

if  True == hasattr(s, 'age'):

print "has age"

(2)使用dir方法

objlist = dir(k)

if 'att' in objlist:

    #do some thing you need

    print k.att

else:

    #error: has not attribute

    pass

网络异常 取消重新上传

11. 编码解码

encode和decode都是针对unicode进行“编码”和“解码”,所以encode是unicode->str的过程,decode是str->unicode的过程

12列表

list列表的append和extend的区别

mylist = []

youlist = []

test = []

list1 = ['xiaoxiaoyu']

list2 = ['xiaoyu']

list3 = ['xiaoyan']

mylist.extend(list1)

mylist.extend(list2)

mylist.extend(list3)

print mylist

##相当于向一维数组mylist中添加了元素,改变数组的大小

##['xiaoyu', 'xiaoyan', 'youlist']

if mylist[0] == 'xiaoxiaoyu':

del mylist[0]

print mylist

print len(mylist)

youlist.append(list1)

youlist.append(list2)

youlist.append(list3)

print youlist

#youlist本来是一个列表,append使得其每个元素也是个列表,youlist维度加1

#[['youlist'], ['xiaoyu'], ['xiaoyan']]

print len(youlist)

#每个元素都是列表

if youlist[0] == ['xiaoxiaoyu']:

del youlist[0]

print youlist

在函数中清空list使用list[:]

def EmailToDevOnly(to_list):

BeDevOnly = False

#BeDevOnly = True

if True == BeDevOnly:

to_list[:]=[]

to_list.append("123")

13. 字典

默认字典是无序的

使用sorted对字典的key进行排序(返回的是key的有序列表,原字典顺序不变)

排序listKey = sorted(dictDayNum.keys(), reverse=True)

判断一个值是否是键

if mykey in mydict.keys():

value = mydict['china']

print value

else:

print "not in keys"

数值与字符串进行转换

balance = float(rowinfo[1]) - float(rowinfo[2])

rowinfo[5] = str(balance)

14. class类

1.私有成员,构造函数,成员函数

class CTest:

def __init__(self, name, age, addr): #构造函数,python只能有一个构造函数,如果可以使用默认参数实现类多态

self.__name = name;

self.__age = age;

self.addr = addr;

print ('hello %s age %d' %(self.__name, self.__age))

def __del__(self):    #析构函数

print 'bye.....'

def __GetName(self):  #任何一个成员函数,第一个参数都是self

return self.__name;

def PrintAttr(self):

name = self.__GetName()

print ('hello name %s age %d' %(name, self.__age))

__name = 'fish'; #变量名之前加 __ 表示该变量是私有的

__age = 20; #私有的

addr = "shanghai"

def Test():

test = CTest("fish fish", 20, "pu dong ");

#name = test.__GetName(); #报错,私有成员函数不能访问

test.__age = 100;        #这地方,是python的一个缺陷,私有成员在类外还是可以修改

test.PrintAttr();

print(test.__age)

return 0;

15.数据库操作

conn = self.__get_master_connection(db_name)

cursor = conn.cursor()

cursor.execute(sql, params)

遇到问题: TypeError: %d format: a number is required, not str

解决办法: 传给sql的变量写对格式就行了. sql里不需要对对应的变量写%d,只写%s就可以了(所有的都写%s)

压缩zip包

zipFileName = "./sdkfile/" + str(userid) + "apisdk_php.zip" #tmpFileName有文件夹名的话,压缩包中也有文件夹路径,不过想改变文件夹深度的话,可以建立临时文件的方式压缩

f = zipfile.ZipFile(zipFileName, 'w' ,zipfile.ZIP_DEFLATED)

f.write(tmpFileName, "apisdk.php") # "apisdk.php" 压缩包中的新文件

f.close()

16.时间操作

整型时间和字符串时间互相转换

import time

import datetime

def GetTimeByStr(strSrcTime):

dictSrcTime = time.strptime(strSrcTime, "%Y-%m-%d %H:%M:%S")

iTaskTime = time.mktime(dictSrcTime)

return iTaskTime

def GetTimeStrByGivenValue(iSrcTime):

dictSrcTime = time.localtime(iSrcTime)

strTaskTime = time.strftime("%Y-%m-%d %H:%M:%S", dictSrcTime)

return strTaskTime

#获取一天的0份0时0秒时间戳

def GetDayBeginTimeStamp(iSrcTime):

day = datetime.datetime.fromtimestamp(iSrcTime)

dtDayBegin = datetime.datetime(day.year, day.month, day.day, 0, 0, 0)

iBeginTStamp = int(time.mktime(dtDayBegin.timetuple()))

return iBeginTStamp

17.对象的深拷贝和浅拷贝

http://blog.csdn.net/crazyhacking/article/details/30053941

a=b 只是增加一个引用,id(a)和id(b)是指向同一块内存地址,函数的返回值也是一样,比如

def Test():

name = 1

print id(name)

return name

if __name__ == '__main__': 

my = Test()

print id(my) #2个地址是一样的,python使用引用计数来管理内存的释放

copy.copy()只是浅拷贝,子对象还是指向同一块内存地址

copy.deepcopy()实现深拷贝

判断操作系统类型

importplatform

defBeWindowsSystem():

    return'Windows'inplatform.system()

defBeLinuxSystem():

    return'Linux'inplatform.system()

判断进程是否存在

def CheckProcessExist(strProcessName):

if True == BeLinuxSystem():

resLines = os.popen('ps -ef | grep python').readlines()

for line in resLines:

if strProcessName in line:

return True

return False

python发送邮件

# -*- encoding: utf-8 -*-

import os

import sys

import smtplib

from email.mime.text import MIMEText

def send_mail(to_list, sub, content):

mail_host = "mail.xxx.com.cn"

mail_user = "apigateman"

mail_pass = "xxx"

mail_postfix = "xxx.com.cn"

me=mail_user+"<"+mail_user+"@"+mail_postfix+">"

msg = MIMEText(content)

msg['Subject'] = sub

msg['From'] = me

msg['To'] = ";".join(to_list)

try:

s = smtplib.SMTP()

s.connect(mail_host)

s.login(mail_user,mail_pass)

s.sendmail(me, to_list, msg.as_string())

s.close()

print 'success'

#WDLOG.Info([('topic', 'send_mail'), ('from', me), ('mailTo', msg['To']), ('subject', sub)])

return True

except Exception, msg:

#WDLOG.Error([('topic', 'send_mail'), ('exception', str(msg))])

print 'fail.....'

#return False

if __name__ == '__main__':

to_list = []

to_list.append('xxxx@xxx.cn')

sub = 'topic'

content = '1236'

send_mail(to_list, sub, content)

18. map的使用

对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。

def add(x):

return 100 + x

if __name__ == '__main__':

hh = [1, 2, 3]

print map(add, hh)

19.Basic Authorization

dictHeader = {}

username = 'fish'

password = '111'

base64string = base64.encodestring('%s:%s' % (username, password))[:-1] #注意哦,这里最后会自动添加一个\n

authheader = "Basic %s" % base64string

dictHeader["Authorization"] = authheader

19.assert

age = None #空字符串,0,None,空的list, 字典,tuple都会抛assert

assert age, \

"validators and/or schema required"

性能

1.判断某个元素是否在字典里

第一段:

if(pos in fre_dist.keys()):

newvalue= fre_dist[pos]

第二段:

if(pos in fre_dist):

newValue=fre_dist[pos]

在处理3万条数据时,第二段代码的速度是第一段代码速度的上千倍。

原因是:第一段代码 fre_dist.keys()变成了list,python在检索list的时候是比较慢的,第二段代码 fre_dist是字典,python在检索字典的时候速度是比较快的

python中list对象的存储结构采用的是线性表,因此其查询复杂度为O(n),而dict对象的存储结构采用的是散列表(hash表),其在最优情况下查询复杂度为O(1)

python虚拟目录(virtualenv)

切换到虚拟目录 source  myenv/bin/activate

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,739评论 0 10
  • 基础1.r''表示''内部的字符串默认不转义2.'''...'''表示多行内容3. 布尔值:True、False(...
    neo已经被使用阅读 1,670评论 0 5
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,753评论 0 8
  • 1. Python的hello-world: print ("Hello, Python!")、 完了 摇就完事儿...
    LunarShade阅读 1,384评论 0 0
  • @贰拾贰画生 感谢简明Python教程 输入输出 输入:raw_input string = raw_input(...
    贰拾贰画生阅读 2,631评论 4 21