一、第三方模块
安装第三方模块
第一种方式:
1.将pip命令加入到环境变量,且将python的安装目录下scripts目录加入到环境变量里面
2.pip install 数据库名称 : pip install xpinyin
python2:easy_install xpinyin or 先安装pip:easy_install pip
指定版本安装:pip install xpinyin==0.5.6
第二种方式:
找到存在python.exe文件的python路径,执行如下路径:
python.exe -m pip install xxxx
第三种方式,手工安装:
1.下载第三方数据库,xxxx.whl or xxxx.tar.gz
安装whl结尾的模块:pip install xxxx.whl
安装tar.gz结尾的模块:先解压,然后执行python setup.py install
区别python原地址
1.区分国外官方源地址:filts.pythonhosted.org
2.国内python源:https://pypi.doubanio.com/simple/
二、xpinyin模块
1.汉语转拼音 pinyin()方法
a.将xpinyin()类实例化
b.调用get_pinyin()函数
c.默认get_pinyin()是以“-”来连接输出,可以再参数中添加需要的连接符号
get_pinyin() or get_pinyin(xxxx,‘x’)
代码:
import xpinyin
name = "小黑"
p = xpinyin.Pinyin() #将类实例化
print(p.get_pinyin(name))
print(p.get_pinyin(name,''))
[reult~]:
xiao-hei
xiaohei
练习:有一批中文名,需要生成账号并保存在文件中,但是名字里面可能有拼音相同的,如果有重复的拼音,那么就名字加1
代码:
import xpinyin
p = xpinyin.Pinyin() #将类实例化
s = """名字字符串"""
#将字符串写到文件中
# all_name_list = s.split()
# with open('all_name_list.txt','w',encoding='utf-8') as f:
# for name in all_name_list:
# f.writelines("%s%s"%(name,'\n'))
d = {} #存的是重复的名字和出现的次数
name_pinyin_list = [] #存的是不重复的名字拼音
all_name_list = s.split()
print(all_name_list)
for i in all_name_list:
name_pinyin = p.get_pinyin(i)
if name_pinyin not in name_pinyin_list:
name_pinyin_list.append(name_pinyin)
else:
if name_pinyin not in d:
d[name_pinyin] = 1
else:
d[name_pinyin] += 1
for name,count in d.items():
for i in range(1,count+1):
new_name = "%s%s"%(name,i)
name_pinyin_list.append(new_name)
with open("name_pinyin.txt",'w',encoding='utf-8') as name_pinyin:
for i in name_pinyin_list:
i = str(i) + '\n'
name_pinyin.write(i)
print(name_pinyin_list)
三、faker模块
作业:可随机生成姓名,地址,身份证号码,银行卡号码
首先将faker模块实例化 faker.Faker(locale=“zh_CN”)
查看所有函数方法print(dir(xxx))
代码:
import faker
f = faker.Faker(locale="zh_CN") #将faker实例化
print(f.name()) #随机姓名
print(f.city()) #身份证号
print(f.user_name()) #用户名
print(f.ipv4()) #IP地址
print(f.ssn()) #身份证号码
#print(f.user_agent())
#查看方法
print(dir(f))
[result~]:
熊淑英
波市
xliu
49.238.252.121
13052619400530386X
四、操作mysql模块pymysql
操作数据库需要知道如下信息:
1)ip:IP地址
2)user:用户名
3)password:密码,必须是字符串
4)db:数据库名称
5)port:端口号,有默认值:3306,必须有些int类型
1.连接mysql方法connect()
如果连接时添加autocommit=True,则sql语句无须执行commit()
import pymysql
ip = "localhost"
user = "root"
password = "123456"
db = "ben"
port = 3306
#添加autocommit之后就会自动确认,无须执行commit()
#connect = pymysql.connect(host=ip, user=user, password=password, db=db, port=port ,autocommit = True,charset="utf8")
connect = pymysql.connect(host=ip, user=user, password=password, db=db, port=port, charset="utf8")
2.创建数据库操作游标
如果在此处创建有表示加参数pymysql.cursors.DictCursor,返回结果就是字典
# cursor = connect.cursor(pymysql.cursors.DictCursor)#返回结果是字典
cursor = connect.cursor()
3.执行sql语句
sql = "select * from custnew;"
#创建table预期
#sql = "create table fmz (id int primary key auto_increment,name varchar(50) not null,sex int default 0, phone varchar(11) unique );"
cursor.execute(sql) #执行sql语句
4.打印输出内容fetchall()
可以输出一条、指定条数、全部数据
fetchall() 输出内容是一个二维数组,
result = cursor.fetchall() #打印全部内容
print(result)
print(cursor.fetchone()) #只打印一条数据
print(cursor.fetchmany(5)) #打印指定数量的数据
5.获取表中的字段描述
print(cursor.description)
5.sql执行结果提交commit()
只有sql语句提交完成才会成功在表中添加数据,同时执行多条语句只需要添加一个提交commit()即可
connect.commit() #提交
6.sql语句回滚rollback()
如果多条语句有一个执行失败,需要添加rollback()进行回滚
connect.rollback() #回滚
7.关闭游标
cursor.close()
8.关闭数据库连接
数据库存在允许最大连接数,如果不关闭会导致其他用户无法连接
connect.close
9.直接循环游标:
直接循环游标,每次去的就是表里面的每一条数据
import pymysql
connect = pymysql.connect(host=ip, user=user, password=password, db=db, port=port, charset="utf8")
cursor = connect.cursor()
sql = "select * from custnew;"
cursor.execute(sql) #执行sql语句
for c in cursor:
print(c)
cursor.close()
connect.close()
[result~]:
(10008, 'wen')
(10009, 'yangwen')
(10010, 'haha')
(10011, '杨文')
(10012, 'zhang')
(10013, 'ying')
(10014, 'ying1')
五、操作Redis数据库的模块redis
1、了解Redis
a.是一个非关系型数据库,nosql类型
b.数据储存类型是K-V类型
c.Redis数据全部放在内存中,读写速度快,每秒最大能支持10W的读写
d.两种数据类型字符串和哈希
字符串string k-v格式:{"name" :1111}
哈希 hash 大字典:{"student" :{"xiaohei": "xxx", "xiaobai": "xxx"}}
list类型
2.Redis 字符串操作
1).Redis连接:
import redis
redis_info = {
"host": "xxxx",
"password": "HK139bc&*",
"port": 6379,
"db": 4
}
r = redis.Redis(**redis_info)
# r = redis.Redis(host="xxxx", password="HK139bc&*", port=6379, db=4,decode_responses=True)
2).Redis字符串类型的增、删、改、查
#写入(k,v,失效时间)、改也用set方法
r.set("name","xiaowu1",60)
#获取
# 获取的值都是byte类型,需要进行decode()处理转换成字符串
print(r.get("name"))
#删除
r.delete("name")
print(r.get("name"))
3).获取失效时间r.get(“name”)
#TTL值为"-1",代表永久不会失效
print(r.ttl("name"))
4).获取数据库里面的key
# 获取当前数据库里面的所有的key
print(r.keys())
#获取可以加筛选条件
print(r.keys("*_*"))
5).判断数据库里面的key是否存在
#返回0代表不存在,返回1代表存在
print(r.exists("fmz_111"))
6).判断数据库里面key的类型
#查看这个key的类型
print(r.type("name"))
[result~]:
b'string'
7).设置key的失效时间
print(r.expire("name",60))
8).hash中冒号的作用
#冒号相当于文件夹,取值的时候也要有文件夹
r.set("yangwen:info","male")
print(r.get("yangwen:info","male"))
2.Redis hash类型操作
1)Redis写入hash类型数据
先写入大key,在写入小key,最后写入数值
r.hset("students","xiaohei",'{"id":1,"score":99}')
r.hset("students","xiaobai",'{"id":1,"score":99}')
2)Redis获取数据
# 获取的值都是byte类型,需要进行decode()处理转换成字符串
# 获取指定的小key
print(r.hget("students","xiaobai"))
# 把大key里面的数据都获取到 ,
print(r.hgetall("students"))
3)Redis数据删除
# 删除指定的小key
r.hdel("students","xiaobai")
# 删除大key
r.delete("students")
4)Redis判断数据是否存在
# 判断里面的小key是否存在
r.hexists("students","xiaobai")
5)将redis返回结果由byte类型改为字符串类型方法
a.使用decode()将结果改为字符串类型
val = r.hgetall("students")
new_ret = {}
for k,v in val.items():
k = k.decode()
v = v.decode()
new_ret[k] = v
print(new_ret)
b.在连接redis时加入decode_responses=True参数
redis_info = {
"host": "xxxx",
"password": "HK139bc&*",
"port": 6379,
"db": 4,
"decode_responses":True
}
r = redis.Redis(**redis_info)
2.Redis list类型操作
1)Redis写入列表
#前/左写入,返回值为列表长度
print(r.lpush("black_list","xiiiiii1"))
#后/右写入
r.rpush("black_list","2")
2)Redis从左区域取值
#从左区域开始范围取值,返回值是一个列表,从0开始取,取到第2个
print(r.lrange("black_list",0,2))
3)Redis删除数据
# #从左面删除和从右面删除,但不能指定值删除
r.lpop("black_list")
# #从右侧删除一个数据
r.rpop("black_list")
# #删除指定的数据具体次数,但要添加删除的具体数量
print(r.lrem("black_list","2","a"))
4)Redis指定位置修改
#指定位置修改
r.lset("black_list",0,"hhhh")
5)Redis查看列表长度
#取这个list的长度
print(r.llen("black_list"))
6)删除除指定范围外的所有数据
#删除列表里面的数据,除了你指定的范围
print(r.ltrim("black_list",0,2))
4.Redis数据库清除
#清空当前数据库
r.flushdb()
#清空所有数据库
r.flushall()
5.Redis集群操作模块rediscluster模块
安装:pip install redis-py-cluster
import rediscluster
startup_nodes = [
{"host":"118.24.3.40","port":6379,"password":"HK139bc&*","db":4},
{"host":"localhost","post":6379,"password":"123456","db":4}
]
r = rediscluster.RedisCluster(startup_nodes=startup_nodes)
6.Redis小练习-数据库迁移
import redis
r = redis.Redis(host="localhost", password="123456", port=6379, db=4,decode_responses=True)
r2 = redis.Redis(host="localhost", password="123456", port=6379, db=11,decode_responses=True)
for k in r.keys():
k_type = r.type(k)
if k_type == "string":
value = r.get(k)
r2.set(k,value)
elif k_type == "hash":
dic = r.hgetall(k)
r2.hmset(k,dic)
elif k_type == "list":
length = r.llen(k)
result = r.lrange(k,0,length-1)
r2.rpush(k,*result)
六、读excel文件的xlrd模块
xlrd基本用法
book = xlrd.open_workbook("testyangwen.xls")
#根据sheet页的名字获取
sheet = book.sheet_by_name("sheet1")
#根据sheet页的下标获取
# sheet = book.sheet_by_index(1)
# 获取所有sheet页
print(book.sheets())
#获取某一个单元格的内容,第一行的第一列
print(sheet.cell(0,0).value)
#获取整行的数据
print(sheet.row_values(0))
# 获取整列的数据
print(sheet.col_values(0))
# 总共多少行
print(sheet.nrows)
# 总共多少列
print(sheet.ncols)
七、修改Excel文件的xlutils模块
xlutils修改文件内容并验证修改内容
import xlrd
from xlutils import copy #对xls进行修改
book = xlrd.open_workbook("test.xls")
#复制
new_book = copy.copy(book)
#获取内容
sheet = new_book.get_sheet(0)
#改写内容
sheet.write(0,0,"编号No.")
#保存
new_book.save("test.xls") #保存
book1 = xlrd.open_workbook("test.xls")
sheet1 = book1.sheet_by_index(0)
print(sheet1.cell(0,0).value)
八、可对excel进行读、写、修改且超过65536行的openpyxl模块
1.优缺点
优点:可对excel进行读、写、修改且超过65536行
缺点:只能对xlsx文件进行修改
import openpyxl
book = openpyxl.load_workbook("info.xlsx")
#打印所有sheet页名称
print(book.sheetnames)
#打开sheet1页,此处sheet名称区分大小写
sheet = book["Sheet1"]
#获取文件内容
print(sheet["A1"].value)
print(sheet["B1"].value)
#修改文件内容
#方法1
# sheet["A1"] = "标号"
sheet.cell(1,1).value = "编号"
#方法2
book.save("info.xlsx")
#去除所有行的数值,返回值是一个二维数组
print(sheet.max_row) #统计多少行
print(sheet.max_column) #统计多少列
# 打印所有行
# print(sheet.rows)
# 取列表所有行内容,并把行内容生成列表
for row in sheet.rows: #获取每行的数据
row_data = [col.value for col in row] #列表生成式
print(row_data)
九.网络请求-request模块
1.get请求、传参、返回值
import requests
# 如果请求报错,加参数verify=False
url = "xxxxxxxxxxxxxx"
# data = {"stu_name":"小黑"}
data = {"stu_name":"小"}
req = requests.get(url,data,verify=False)
# 如果接口在url和data中均有参数则续传params和data两个参数
#params参数是传在url里面的
#data参数是传在body里面的
#data2 = {"version":1}
#req = requests.get(url,params=data2,data=data,verify=False)
#查看请求发出去的url
print(req.url)
#返回字典,如果接口返回的不是json(),次返回会报错
print(req.json())
# 返回的是字符串
print(req.text)
# 返回的是bytes
print(req.content)
#返回状态码
print(req.status_code)
#返回的cookie
print(req.cookies)
#返回的headers
print(req.headers)
#传k-v格式
#params参数是传在url里面的
#data参数是传在body里面的
2.post请求传json类型的数据
#传json格式的
url = "xxxxxxxxxxx"
data = {
"grade": "飞马座",
"phone": "22345678993",
"name":"哈哈哈哈"
}
req = requests.post(url,json=data)
print(req.json())
3.post请求传cookie
上传cookies时需要将cookie转换为字典格式
url = "https://qun.qq.com/cgi-bin/qun_mgr/search_group_members"
data = {
"gc": xxxxxxx,
"st": 0,
"end": 20,
"sort": 0,
"bkn": 1687073782
}
#格式化为字典
d = {}
s = "tvfe_boss_uuid=693bda1ff07b73c5; pgv_pvid=5068220768; RK=79jAxeS6ZU; ptcz=cf8175ad7b47bf88c6f9774fab28c49d9a8af7086da5dcae6adc6f109de1f430; pac_uid=0_1711287852aaf; _qpsvr_localtk=0.5466682079041223; p_uin=o1099276647; traceid=d301e3229d; uin=o1099276647; skey=@v4v69M7g7; pt4_token=mu55nB0StiLBYmuuZ8Q8r9SMqV478hhIydjjtFrGaFQ_; p_skey=hi8DANKhuFE4SmcrwGfemxQvHhnOtUnmblurRtAzWCc_"
for i in s.split(';'):
k,v = i.strip().split("=")
d[k] = v
print(d)
#cookie = {'RK': 'XYYhgDpPfy', 'ptcz': 'a5b23b4f93bc2f304119957286b77b21be95814358d482ef0a2bf216733e57ba', 'pgv_pvid': '5931324545', 'uin': 'o0511402865', 'skey': '@HHempil2m', 'p_uin': 'o0511402865', 'pt4_token': 'tkeLBl-znMjpBJxIv1Chj*kLx7p0dsh4BkZfF39cpDk_', 'p_skey': 'OS7gS9Zw8*r*aIpqd5-S5BUo65EJMNWRkLLMO1Vpu5o_', 'traceid': '5b35fe5632'}
#上传cookie
req = requests.post(url,data,cookies=d)
print(req.json())
4.上传headers
#传headers方式,也可以用来传cookie,直接把cookie内容传到herders里面
url = "https://qun.qq.com/cgi-bin/qun_mgr/search_group_members"
data = {
"gc": 29306799,
"st": 0,
"end": 20,
"sort": 0,
"bkn": 1687073782
}
header = {"cookie":"tvfe_boss_uuid=693bda1ff07b73c5; pgv_pvid=5068220768; RK=79jAxeS6ZU; ptcz=cf8175ad7b47bf88c6f9774fab28c49d9a8af7086da5dcae6adc6f109de1f430; pac_uid=0_1711287852aaf; _qpsvr_localtk=0.5466682079041223; p_uin=o1099276647; traceid=d301e3229d; uin=o1099276647; skey=@v4v69M7g7; pt4_token=mu55nB0StiLBYmuuZ8Q8r9SMqV478hhIydjjtFrGaFQ_; p_skey=hi8DANKhuFE4SmcrwGfemxQvHhnOtUnmblurRtAzWCc_"}
req = requests.post(url,data,headers=header)
print(req.json())
5.上传文件
# 上传文件
url = "http://api.nnzhp.cn/api/file/file_upload"
data = {"file":open("testyangwen.xls", 'rb')} #文件打开模式'rb'
requests.post(url,data)
6.下载文件
#下载qq头像并保存
url = "https://q4.qlogo.cn/g?b=qq&nk=xxxxxx&s=140"
req = requests.get(url)
print(req)
with open("a.jpg",'wb') as fw:
fw.write(req.content)