Day6 - Python第三方模块xpinyin、faker、pymysql、Redis、rediscluster、xlrd、xlutils、openpyxl、request

一、第三方模块

安装第三方模块

第一种方式:
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值