python常用函数以及模块(二)

橙三吉。 提交于 2019-12-01 15:13:29
  1. 随机数模块。

import random

arr = [1, 2, 3, 4]

print random.random() #返回0.0~1.0的随机数

print random.uniform(0.5, 0.8) #范围内随机数

print random.randint(1, 5) #范围随机整数

print random.choice(arr) #数组,元组中随机一个数

print random.sample(arr, 2) #数组,元组中随机两个数

random.shuffle(arr)   #打乱数组,不能用在元组上

print arr

#result:
0.504674499914
0.79300720529
1
1
[1, 4]
[3, 2, 4, 1]

2. 数据对象持久化。

try:
    import pickle
except:
    import CPickle as pickle   # CPickle是pickle的c语言版,更快

arr = [123, [1, 2, 3], {'a':'A'}, (1, 2, 3)]

pack = pickle.dumps(arr)
unpack = pickle.loads(pack)

3. csv模块。

import csv


with open('a.csv', 'wb') as fp:

    writer = csv.writer(fp)

    for n in range(5):
        writer.writerow([str(n), str(n) * 2, str(n) * 3])  #每次写一行

with open('b.csv', 'wb') as fp:

    writer = csv.writer(fp)

    writer.writerows([(1, 11, 111), (2, 22, 222)]) #一次写多行
    
with open('a.csv', 'rb') as fp:

    data = csv.reader(fp)

    for line in data:

        print line

4. urlparse模块。

# 格式化urlparse,获取host,path,query等参数

import urlparse

print urlparse.urlparse('http://www.iplaypython.com/module/urlparse.html')

5. urllib模块

import urllib

bd = urllib.urlopen('www.baidu.com')

1 )、read(), readline(), readlines(), fileno(), close(),看到没有与我们操作文件的方法都是一样的。
2 )、info() ,返回一个httplib.HTTPMessage这个python对象,可以显示你访问的网络资源服务器的HTTP头部信息。
3 ) 、getcode() ,它的作用是返回http网页状态码,200是成功访问,404是未找到,还有其它301状态码等
4 )、geturl(),返回你请求的url地址。

#下载文件
file = urllib.urlretrieve(url, filename)

#临时缓存文件
file = urllib.urlretrieve(url)
#清除缓存
urllib.urlcleanup()

#url编码
url = 'http://www.baidu.com'
urllib.quote(url)   # urllib.unquote(url) 反向
#result: http%3A//www.baidu.com
urllib.quote_plus(url)  # urllib.unquote_plus(url)  反向
#result: http%3A%2F%2Fwww.baidu.com

url的GET提交和POST。

# GET方法
import urllib
para = urllib.urlencode({'m':'aa', 'a': 'bb'})
fp = urllib.urlopen('http://www.1123123123.com/?%s' %para )
string = fp.read()

#POST方法

fp = urllib.urlopen('http://www.1123123123.com' para)
string = fp.read()

5.1 urllib2模块。

加头部访问

import urllib2

#加头部访问
request = urllib2.Request(url, urllib.urlencode(data), headers = {"User-Agent": "Mozilla-Firefox5.0"})

# 或者
request = urllib2.Request(url)
request.add_header({"User-Agent": 'Mozilla-Firefox5.0'})
response = urllib2.urlopen(request)

#或者
header={"User-Agent": "Mozilla-Firefox5.0"}
urllib2.urlopen(url, urllib.urlencode(data), header)

超时设置

#设置超时
response = urllib2.urlopen('http://www.google.com', timeout=10)

传递cookie登录

#传递cookie登录

import urllib
import urllib2
import cookielib
   
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.CookieJar()
 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
      'stuid':'201200131012',
      'pwd':'23342321'
    })
     
#登录教务系统的URL
loginUrl = 'http://www.baidu.com/login.php'
 
#模拟登录,并把cookie保存到变量
result = opener.open(loginUrl,postdata)
 
#利用cookie请求访问另一个网址,此网址是成绩查询网址
gradeUrl = 'http://www.baidu.com/info.php'
 
#请求访问成绩查询网址
result = opener.open(gradeUrl)
 
print result.read()

Debug模式

#debug 模式

import urllib2 
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler) 
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.123123123.com')

设置代理访问

#设置代理访问

import urllib2
enable_proxy=True
proxy_handler=urllib2.ProxyHandler({‘http‘:‘http://some-proxy.com:8080‘})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

urllib和urllib2的区别:

urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。

urllib2模块比较优势的地方是urlliburllib2.urlopen可以接受Request对象作为参数,从而可以控制HTTP Request的header部。

但是urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助。


7. resquests模块的用法。是urllib和urllib2的增强版。

import requests

#get 方式
html = requests.get(url, headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}).content

#post方式

html = requests.post(url, headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}, data={'a':'aa', 'b':'bb'}).content

6. robotparser,判断robots.txt文件是否允许url被读取

import robotparser
import urlparse

agent_name = 'IPLAYPYTHON'

url_base = 'http://www.iplaypython.com/'

parse = robotparser.RobotFileParser()

parse.set_url(urlparse.urljoin(url_base, 'robots.txt'))

parse.read()

paths = ['/', '/tags/', '/admin/']


for path in paths:

    print '%6s: %s' %(parse.can_fetch(agent_name, path), path)

    url = urlparse.urljoin(url_base, path)

    print '%6s : %s' % (parse.can_fetch(agent_name, url), url)

7. base64编码。

import base64
encode = base64.b64encode('我靠')
print encode
print base64.b64decode(encode)

8. smtplib模块。

#正常的邮件

#!/usr/bin/python
# coding:utf-8

# -*- coding: utf-8 -*-

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))

from_addr = raw_input('From: ')  # 发送方邮件账户,qwerty@163.com
password = raw_input('Password: ') # 发送方密码, 123123 , 这个密码不是邮箱密码,而是在邮箱设置里面IMAP/#SMTP服务开启后的设置密码

to_addr = raw_input('To: ')  # 12312321@qq.com
smtp_server = raw_input('SMTP server: ') # smtp.163.com

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')  #邮件内容

#如果想发送html

msg = MIMEText('<html><body><h1>Hello</h1>' +
    '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
    '</body></html>', 'html', 'utf-8')

msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr) #邮件发送者的名称
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()  #邮件标题

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)

server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

注意:有的可以不设置发送账户,但会被邮箱过滤为垃圾邮件。

#发送带附件的邮件

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))

from_addr = raw_input('From: ')
password = raw_input('Password: ')
to_addr = raw_input('To: ')
smtp_server = raw_input('SMTP server: ')

msg = MIMEMultipart()
msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()

# add MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))

#如果在html中显示图片
msg.attach(MIMEText('<html><body><h1>Hello</h1>' +
    '<p><img src="cid:0"></p>' +
    '</body></html>', 'html', 'utf-8'))

# add file:
with open('./UML.png', 'rb') as f:
    mime = MIMEBase('image', 'png', filename='test.png')
    mime.add_header('Content-Disposition', 'attachment', filename='test.png')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    mime.set_payload(f.read())
    encoders.encode_base64(mime)
    msg.attach(mime)

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!