python : 模块

内置模块
os

用于提供系统级别的操作。
在操作系统中定义的环境变量,全部保存在os.environ变量中。
获取某个环境变量的值,可以调用os.environ.get(‘PATH’)。

os.getcwd:返回当前的工作目录
os.name :获取当前使用的操作系统。nt是windows,posix是linux或unix。
os.remove('3.txt'):删除指定文件
os.system('ls -a'):运行shell命令ls -a
os.chdir('./bess'):改变当前工作目录到指定路径
os.curdir 获取当前工作目录路径

os.path.abspath("1.txt") 查看当前目录的绝对路径
os.path.dirname(path) 如果是文件,去掉文件名返回目录;如果是目录,返回上一级目录。
os.path.split(os.getcwd()) 用于分开一个目录名称中的目录部分和文件名称部分。
os.path.splitext('/path/to/file.txt')[1] 可以直接得到文件扩展名".txt"。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 把两个路径合成一个(路径+文件)

os.pardir 表示当前平台下上一级目录的字符
os.path.getctime("/root/1.txt") 返回文件的(创建时间)时间戳
os.path.exists(os.getcwd()) 判断文件是否存在
os.path.expanduser('~/dir')~扩展成用户根目录
os.path.expandvars('$PATH') 扩展环境变量PATH

os.path.isfile 判断是否是文件名,10否
os.path.isdir 判断是否是目录,10否 
os.path.islink 是否是符号连接
os.path.ismout 是否是文件系统安装点
os.path.samefile 判断两个文件名是不是指的是同一个文件
os.path.walk('/home/huaying', test_fun, "a.c")

列出当前目录下的所有目录
dir = [x for x in os.listdir(‘.’) if os.path.isdir(x)]

要列出所有的.py文件
file = [x for x in os.listdir(‘.’) if os.path.isfile(x) and os.path.splitext(x)[1]==‘.py’]

sys模块

用于提供对解释器相关的操作
sys.path 保存系统环境变量
sys.path.append 添加到系统的环境变量
对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append(‘xxx’)

base64
import base64
s = base64.b64encode('在Python中使用BASE 64编码'.encode('utf-8'))
print(s)
d = base64.b64decode(s).decode('utf-8')
print(d)
s = base64.urlsafe_b64encode('在Python中使用BASE 64编码'.encode('utf-8'))
print(s)
d = base64.urlsafe_b64decode(s).decode('utf-8')
print(d)
hashlib

用于加密,提供了常见的摘要算法(哈希算法、散列算法),如MD5、SHA1。把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest())

sha1 = hashlib.sha1()
sha1.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(sha1.hexdigest())
requests

r = requests.get(‘http://www.weather.com.cn/adat/sk/101010500.html’) 获取文件内容

time & datetime

处理日期和时间的标准库

from datetime import datetime

now = datetime.now()
dt = now.timestamp() # 把datetime转换为timestamp
t = 1429417200.0
print(datetime.fromtimestamp(t))
cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
print(cday)
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
IO

StringIO 是在内存中读写str,有时数据读写不一定是文件,也可以在内存中读写。

from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue())

BytesIO 实现了在内存中读写bytes。

#StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
http
import http.cookies
c = http.cookies.SimpleCookie() 
c['name'] = 'DarkBull'
c['address'] = 'ChinaHangZhou'
c['address']['path'] = '/' 
# 路径 
c['address']['domain'] = 'appspot.com' 
# domain 
c['address']['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT'  
# 过期时间 
print (c.output()) 
print (c.js_output()) 
logging

用于便捷记录日志且线程安全的模块

shutil

文件、文件夹、压缩包 处理模块

re

正则表达式的运用。
sub函数 : 提供一个替换值(可以是字符串或一个函数),和一个要被处理的字符串
1.phone = “2004-959-559 # This is Phone Number”
num = re.sub(r’#.*KaTeX parse error: Expected 'EOF', got '#' at position 38: …n=re.compile(r'#̲.*'); num = pattern.sub(“”, phone)
==> 2004-959-559

search函数: 返回的是第一个匹配对象,调用对象的group方法获得字符串
match函数:Match对象匹配(开头)的结果。调用对象的group方法获得字符串

compile函数:把正则表达式编译成一个正则表达式对象。
经常使用的正则表达式编译成正则表达式对象,可以提高一定的效率

findall函数:可以获取字符串中所有匹配的字符串。
1.pattern = re.compile(r’hello’)# 将正则表达式编译成Pattern对象,返回这个对象
match = pattern.match(‘hi hello world!’)#使用Pattern匹配文本,获得匹配结果
输出 hello
pattern.findall(‘“hello world hello python”’)
输出 [‘hello,’hello’]
2.pattern = re.compile(r’han(ds)ome’)# 将正则表达式编译成Pattern对象,返回这个对象
text = “JGood is a handsome boy, he is cool, clever, and so on…”
m = pattern.search(text)
m.group(0) //handsome m.group(1) //ds

split函数:分割字符串
re.split(r’\s+', “www dodo com”) 将字符串按空格分割成一个单词列表

random
random.choice(['apple', 'pear', 'banana']) #从序列中获取一个随机元素
random.uniform(10, 20) #生成一个指定范围内的随机符点数
random.randint(12, 20) #生成一个指定范围内的整数

random.randrange从指定范围内,按指定基数递增的集合中 获取一个随机数。
random.randrange(6) #打印0-5之间的整数
random.randrange(10, 100, 2) #结果相当于从[10,12,14,16,...96,98]序列中获取一个随机数,与random.choice(range(10, 100, 2)等效

p = ["Python", "is", "powerful", "simple", "and so on..."]  
random.shuffle(p) #将一个列表中的元素打乱
random.sample(range(10), 10) #从指定序列中随机获取指定长度的片断
urllib

提供了一系列用于操作URL的功能。

import urllib
'''回调函数
@blocknum: 已经下载的数据块
@blocksize: 数据块的大小
@totalsize: 远程文件的大小
'''
def callbackfunc(blocknum, blocksize, totalsize):
    percent = 100.0 * blocknum * blocksize / totalsize
    if percent > 100:
        percent = 100
    print ("%.2f%%"% percent)

url = 'http://www.sina.com.cn'
local = './sina.html'
urllib.urlretrieve(url, local, callbackfunc)
import urllib.request
def getdata():
    url="http://www.baidu.com"  
    data = urllib.request.urlopen(url).read()
    print(data)
getdata()

日常上网浏览网页时,会看到一些好看的图片时希望把这些图片保存下载,最常规的做法是通过鼠标右键,选择另存为。
但有些图片鼠标右键的时候并没有另存为选项,还有办法就通过就是通过截图工具截取下来,但这样就降低图片的清晰度。
可以通过python来实现一个简单的爬虫功能,把想要的代码爬取到本地。

def getHtml(url):  
    html = urllib.request.urlopen(url).read()
    return html.decode('utf-8',errors='ignore')
def getImg(html):  
    reg = r'src="(.+?\.jpg)" pic_ext'  
    imgre = re.compile(reg)  
    imglist = imgre.findall(html)  

    x = 0  
    for imgurl in imglist:  
        urllib.request.urlretrieve(imgurl,'%s.jpg' % x)  
        x = x + 1
html = getHtml("http://tieba.baidu.com/p/3499153378")  
getImg(html)
json

python和json类型的转换
JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

json.dumps:转换成json格式
json.loads:换成python格式
json.dump:
主要用来json文件读写,和json.load函数配合使用。
json.load:
加载json格式文件

import json   

data = [{"a":"aaa","b":"bbb","c":[1,2,3,(4,5,6)]},33,'tantengvip',True]
data2 = json.dumps(data)
print (data2)
'[{"c": [1, 2, 3, [4, 5, 6]], "b": "bbb", "a": "aaa"}, 33, "tantengvip", true]'
data = json.loads(data2) 
print (data)

f = open('tt.txt', 'a')
json.dump(data2, f)
'生成了一个tt.txt文件,保存了json格式的数据'
f = open('./tt.txt','r')
hehe = json.load(f)
print(hehe)
'从txt文件中读取了json数据'
itertools

提供了有用的用于操作迭代对象的函数。

count 创建一个无限的迭代器,打印出自然数序列,按Ctrl+C退出。

natuals = itertools.count(1)
for n in natuals:
    print(n)

cycle 会把传入的一个序列无限重复下去

cs = itertools.cycle('ABC')
for c in cs:
    print(c)

repeat 负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数。

ns = itertools.repeat('A', 3)
for n in ns:
    print(n)

无限序列虽然可以无限迭代下去,但通常会通过takewhile()等函数根据条件判断来截取出一个有限的序列。

natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x <= 10, natuals)
print (list(ns))

chain 可以把一组迭代对象串联起来,形成一个更大的迭代器。

for c in itertools.chain('ABC', 'XYZ'):
    print(c)

groupby把迭代器中相邻的重复元素挑出来放在一起

for key, group in itertools.groupby('AAABBBCCAAA'):
    print(key, list(group))
collections

namedtuple 可以方便地定义一种数据类型,具备tuple的不变性。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print('Point:', p.x, p.y)

deque是为了高效实现插入和删除操作的双向列表(list),适合用于队列和栈。

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
print(q)

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。

from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
print('dd[\'key1\'] =', dd['key1'])
print('dd[\'key2\'] =', dd['key2'])

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict.OrderedDict能够记录字典元素插入的顺序,常常和排序函数一起使用来生成一个排序的字典

#实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key
from collections import OrderedDict
'Counter是一个简单的计数器,实际上也是dict的一个子类'
from collections import Counter
c = Counter()
for ch in 'programming':
    c[ch] = c[ch] + 1
print(c)
generator

第一种方法,把一个列表生成式的[]改成(),就创建了一个generator。

L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

第二种方法,一个函数定义中包含yield关键字。
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
        
for n in fib(6):
    print (n)
smtplib email

Python对SMTP支持有 smtplib 和 email 两个模块。
email 负责构造邮件,smtplib 负责发送邮件。

# -*- coding: UTF-8 -*-
from email.mime.text import MIMEText

# 发送邮箱和授权码:
from_addr = "yangxxxxxxxxx@163.com"
password = "Yangxxxx"
# SMTP服务器地址:
smtp_server = "smtp.163.com"
# 收件邮箱:
to_addr = "1039xxxxxx@qq.com"

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['Subject'] = "主题为: 邮件的主题我还没想好呢~~"
msg['From'] = from_addr   # 发送者
msg['To'] = to_addr   # 接收者

import smtplib
server = smtplib.SMTP() # SMTP协议默认端口是25
server.connect(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
print("邮件发送成功")
server.quit()
serial

封装了对串口的访问。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夏与冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值