J

jieba

jieba库是优秀的中文分词第三方库 ,它可以利用一个中文词库,确定汉字之间的关联概率将汉字间概率大的组成词组,形成分词结果,将中文文本通过分词获得单个的词语。jieba分词的三种模式 :精确模式、全模式、搜索引擎模式

1.精确模式:把文本精确的切分开,不存在冗余单词 2.全模式:把文本中所有可能的词语都扫描出来,有冗余 3.搜索引擎模式:在精确模式基础上,对长词再次切分

pip3 install jieba

主要函数

jieba.cut(s) 
被运用于精确模式,将会返回一个可迭代的数据类型
jieba.cut(s,cut_all=True) 
被运用于全模式,输出文本s中的所有可能单词
jieba.cut_for_search(s)
搜索引擎模式,适合搜索引擎建立索引的分词结果
jieba.lcut(s)
被运用于精确模式,将会返回一个列表类型
jieba.lcut(s,cut_all=True)
被运用于全模式,返回一个列表类型
jieba.lcut_for_search(s)
搜索引擎模式,返回一个列表类型
jieba.add_word(w)
向分词词典加入新词

L

heapq

排序取最大值,最小值

列表:

import heapq

nums = [15,23,51,65,76,122,257]
result1 = heapq.nlargest(4,nums)
result2 = heapq.nsmallest(5,nums)
print(result1)
print(result2)
结果:
[257, 122, 76, 65]
[15, 23, 51, 65, 76]

字典:

import heapq

students = [{"name":"AA","Score":88,"height":104},
          {"name":"BB","Score":66,"height":108},
          {"name":"CC","Score":90,"height":59},
          {"name":"DD","Score":198,"height":50}]

result = heapq.nlargest(3,students,lambda x:x["Score"])
print(result)
结果:
[{'name': 'DD', 'Score': 198, 'height': 50}, {'name': 'CC', 'Score': 90, 'height': 59}, {'name': 'AA', 'Score': 88, 'height': 104}]  

logging

1 模块简介

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print() ,具备如下优点:

  1. 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;

  2. print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;

2 模块使用

2.1 基本使用

控制台输出日志

import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")

输出结果为:

2019-11-26 14:34:38,024 - __main__ - INFO - Start print log
2019-11-26 14:34:38,025 - __main__ - WARNING - Something maybe fail.
2019-11-26 14:34:38,025 - __main__ - INFO - Finish

logging.basicConfig函数各参数:

参数名称 参数描述
filename 指定日志文件名
filemode 指定打开方式,r[+],w[+],a[+]
format 日志输出的格式(见下表)
datefmt 日志附带时间日期的格式
level 设置日志级别
stream 定义输出流,不能和filename参数一起使用
handles 定义处理器,不能和filename,stream参数一起使用

format输出格式:

变量 格式 变量描述
asctime %(asctime)s 将日志的时间构造成可读的形式,默认情况下是精确到毫秒,如 2018-10-13 23:24:57,832,可以额外指定 datefmt 参数来指定该变量的格式
name %(name) 日志对象的名称
filename %(filename)s 不包含路径的文件名
pathname %(pathname)s 包含路径的文件名
funcName %(funcName)s 日志记录所在的函数名
levelname %(levelname)s 日志的级别名称
message %(message)s 具体的日志信息
lineno %(lineno)d 日志记录所在的行号
process %(process)d 当前进程ID
processName %(processName)s 当前进程名称
thread %(thread)d 当前线程ID
threadName %threadName)s 当前线程名称

将日志写到文件

将日志写到文件

设置logging,创建一个FileHandler,并对输出消息的格式进行设置

列表推导式

s = [1,[2,[3,4]]]
res = []
def fun(s):
   for i in s:
       if isinstance(i,list):
           fun(i)
       else:
           res.append(i)
fun(s)
print(res)

递归解决,递归一定要有出口

# 一个条件
print([x for x in range(10) if x%2 == 0])

# 多个条件
print([x for x in range(30) if x%2==0 and x%6==0])

# if-else
print([x+1 if x>=5 else x*10 for x in range(10)])

# 嵌套列表推导
list_of_list = [[1,2,3],[4,5,6],[7,8]]
print([y for x in list_of_list for y in x])

结果:
[0, 2, 4, 6, 8]
[0, 6, 12, 18, 24]
[0, 10, 20, 30, 40, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8]
   

P

pymysql

增删改查操作

添加多条数据

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla",
)

# 获取光标
cursor = conn.cursor()

# 定义要执行的sql语句
sql = "insert into userinfo(user,pwd) values (%s,%s);"
data = [
  ("july","147"),
  ('june',"258"),
  ("marin","269")
]

# 拼接并执行sql语句
cursor.executemany(sql,data)

# 涉及写操作要注意提交
conn.commit()

# 关闭连接
cursor.close()
conn.close()

输出结果为:

插入单条数据

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla"
)

cursor = conn.cursor()

sql = "insert into userinfo(user,pwd) values (%s,%s);"

name = "wuli"
pwd = "123456789"

cursor.execute(sql,[name,pwd])

conn.commit()
cursor.close()
conn.close()

输出结果为:

获取最新插入数据

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla"
)

cursor = conn.cursor()

sql = 'insert into userinfo(user,pwd) values (%s,%s);'

name = "dalei"
pwd = "670544"

cursor.execute(sql,[name,pwd])
conn.commit()

# 获取最新的那一条数据的id
last_id = cursor.lastrowid
print("最后一条数据的id是:",last_id)

cursor.close()
conn.close()

输出结果为:

S

shutil

将一个文件下的文件转移到另一个文件夹

import os
import time
import shutil

src_path = 'C:/Users/lyx/Desktop/test12/'
target_path = 'C:/Users/lyx/Desktop/test13/'

whilr True:
   # 返回指定路径下的文件和文件夹列表。
   file_list = os.listdir(src_path)
   if len(file_list) > 0:
       for file in file_list:
           shutil.move(src_path+file,target_path+file)

删除操作

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla"
)

cursor = conn.cursor()

sql = "delete from userinfo where user=%s;"
name = "june"

# 拼接要执行的sql语句
cursor.execute(sql,[name])
conn.commit()

# 关闭连接
cursor.close()
conn.close()

输出结果为:

更改数据

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla"
)

cursor = conn.cursor()

sql = "update userinfo set pwd=%s where user=%s;"
cursor.execute(sql,["july1","july"])
conn.commit()

cursor.close()
conn.close()

输出结果为:

查新数据

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla"
)

# 返回字典数据类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select user,pwd from userinfo;"
cursor.execute(sql)

ret1 = cursor.fetchone()  # 取一条
ret2 = cursor.fetchmany(3) # 取三条
ret3 = cursor.fetchone()  # 取一条



cursor.close()
conn.close()

print(ret1)
print(ret2)
print(ret3)

# 可以获取指定数量的数据
cursor.fetchmany(3)
# 光标按绝对位置移动到1
cursor.scroll(1,mode="absolute")
# 光标按照相对位置移动1
cursor.scroll(1,mode="relative")

查询结果为:

数据回滚

import pymysql

conn = pymysql.connect(
   host = "172.18.5.118",
   port = 3306,
   user = "root",
   password = "123456",
   database = "pymysqla"
)

cursor = conn.cursor()

sql1 = "insert into userinfo(user,pwd) values (%s,%s);"
sql2 = "insert into hobby(id,hobby) values (%s,%s);"

user = "july1"
pwd = "july1"

# id = "我是错误的id"
id = 2
hobby = "打游戏"

try:
   # 拼接并执行sql语句
   cursor.execute(sql1,[user,pwd])
   print(sql1)
   cursor.execute(sql2,[id,hobby]) # 操作的sql语句
   # 设计写操作注意提交
   conn.commit()
except Exception as e:
   print(str(e))
   # 有异常就回滚
   conn.rollback()

#关闭连接
cursor.close()
conn.close()

运行结果为:

U

urllib

原文链接:https://blog.csdn.net/bo_mask/article/details/76067790

在Python2版本中,有urllib和urlib2两个库可以用来实现request的发送。而在Python3中,已经不存在urllib2这个库了,统一为urllib

urllib中包括了四个模块:

urllib.request,urllib.error,urllib.parse,urllib.robotparser

urllib.request可以用来发送request和获取request的结果 ​ urllib.error包含了urllib.request产生的异常 ​ urllib.parse用来解析和处理URL

urllib.robotparse用来解析页面的robots.txt文件

模拟请求使用的最主要的库是urllib.request,异常处理是urllib.error

urllib.request

urllib.request.urlopen()基本使用

urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理 authenticaton (授权验证), redirections (重定向), cookies (浏览器Cookies)以及其它内容。

from urllib import request
import urllib

response = urllib.request.urlopen("https://www.baidu.com")
print(response.read().decode("utf-8"))
print(type(response))
<class 'http.client.HTTPResponse'>

通过输出结果可以发现它是一个 HTTPResposne 类型的对象,它主要包含的方法有 read() 、 readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数和 msg 、 version 、 status 、 reason 、 debuglevel 、 closed 等属性。 得到这个对象之后,赋值为 response ,然后就可以用 response 调用这些方法和属性,得到返回结果的一系列信息。例如 response.read() 就可以得到返回的网页内容, response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到等。

from urllib import parse
from urllib import request
import urllib

data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read().decode("utf-8"))

在这里我们传递了一个参数 word ,值是 hello 。它需要被转码成 bytes (字节流)类型。其中转字节流采用了 bytes() 方法,第一个参数需要是 str (字符串)类型,需要用 urllib.parse.urlencode() 方法来将参数字典转化为字符串。第二个参数指定编码格式,在这里指定为 utf8 。 提交的网址是 httpbin.org ,它可以提供 HTTP 请求测试。 http://httpbin.org/post 这个地址可以用来测试 POST 请求,它可以输出请求和响应信息,其中就包含我们传递的 data 参数。

运行结果如下:


{
"args": {},
"data": "",
"files": {},
"form": {
"word": "hello"
},
"headers": {
"Accept-Encoding": "identity",
"Content-Length": "10",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.5"
},
"json": null,
"origin": "123.124.23.253",
"url": "http://httpbin.org/post"
}

timeout参数

timeout 参数可以设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间。它支持 HTTP 、 HTTPS 、 FTP 请求。

urllib.request.Request

由上我们知道利用 urlopen() 方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求,如果请求中需要加入 headers 等信息,我们就可以利用更强大的 Request 类来构建一个请求。

from urllib import request
import urllib

request1 = urllib.request.Request("https://www.baidu.com")
response = urllib.request.urlopen(request1)
print(response.read().decode("utf-8"))

可以发现,我们依然是用 urlopen() 方法来发送这个请求,只不过这次 urlopen() 方法的参数不再是一个URL,而是一个 Request ,通过构造这个这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加 丰富和灵活

Request构造方法:

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

第一个参数是请求链接,这个是必传参数,其他的都是可选参数。

data 参数如果要传必须传 bytes (字节流)类型的,如果是一个字典,可以先用 urllib.parse.urlencode() 编码。

headers 参数是一个字典,你可以在构造 Request 时通过 headers 参数传递,也可以通过调用 Request 对象的 add_header() 方法来添加请求头。请求头最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User- Agent 是 Python-urllib ,你可以通过修改它来伪装浏览器,比如要伪装火狐浏览器,你可以把它设置为 Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11

origin_req_host 指的是请求方的 host 名称或者 IP 地址。

unverifiable 指的是这个请求是否是无法验证的,默认是 False 。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个HTML文档中的图片,但是我们没有自动抓取图像的权限,这时 unverifiable 的值就是 True 。

method 是一个字符串,它用来指示请求使用的方法,比如 GET , POST , PUT 等等。

from urllib import request
import urllib.parse

url = "http://httpbin.org/post"
headers = {
#伪装一个火狐浏览器
   "User-Agent":'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
   "host":'httpbin.org'
}

dict = {
   "name":"Germey"
}

data = bytes(urllib.parse.urlencode(dict),encoding="utf-8")
req = request.Request(url=url,data=data,headers=headers,method="POST")
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

通过四个参数构造了一个 Request , url 即请求链接,在 headers 中指定了 User-Agent 和 Host ,传递的参数 data 用了 urlencode() 和 bytes() 方法来转成字节流,另外指定了请求方式为 POST 。

运行结果如下:


{
 "args": {},
 "data": "",
 "files": {},
 "form": {
   "name": "Germey"
},
 "headers": {
   "Accept-Encoding": "identity",
   "Connection": "close",
   "Content-Length": "11",
   "Content-Type": "application/x-www-form-urlencoded",
   "Host": "httpbin.org",
   "User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
},
 "json": null,
 "origin": "1.85.221.5",
 "url": "http://httpbin.org/post"
}

另外 headers 也可以用 add_header() 方法来添加。

req = request.Request(url=url, data=data, method='POST') req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5;Windows NT)')

如此一来,我们就可以更加方便地构造一个 Request ,实现请求的发送。

w

wordcloud

worldcloud是优秀的词云展示第三方库,以词语为展示单位,通过图形可视化的方式,更加直观和艺术的展示文本

pip install wordcloud

使用方法

w = wordcloud.WordCloud()

方法 描述
w.generate 向WorldCloud对象中加载文本txt w.generate("Python and WorldCloud")
w.to_file(filename) 将词云输出为图像文件.png或.jpg格式 w.to_file("outfile.png")
import wordcloud

w = wordcloud.WordCloud()
w.generate("wordcloud by python")
w.to_file("pyworldcloud.png")

配置对象参数

w = wordcloud.WordCloud(<参数>)

参数 描述
width 指定词云对象生成图片的宽度,默认400像素 w=wordcloud.WordCloud(width=600)
height 指定词云对象生成图片的高度,默认200像素 w=wordcloud.WordCloud(height=400)
min_font_size 指定词云中字体的最小字号,默认4号 w=wordcloud.WordCloud(min_font_size=10)
max_font_size 指定词云中字体的最大字号,根据高度自动调节 w=wordcloud.WordCloud(max_font_size=20)
font_step 指定词云中字体字号的步进间隔,默认为1 w=wordcloud.WordCloud(font_step=2)
font_path 指定文体文件的路径,默认None w=wordcloud.WordCloud(font_path="msyh.ttc")
max_words 指定词云显示的最大单词数量,默认200 w=wordcloud.WordCloud(max_words=20)
stop_words 指定词云的排除词列表,即不显示的单词列表 w=wordcloud.WordCloud(stop_words="Python")
mask 指定词云形状,默认为长方形,需要引用imread()函数 from scipy.msc import imread mk=imread("pic.png") w=wordcloud.WordCloud(mask=mk)
background_color 指定词云图片的背景颜色,默认为黑色 w=wordcloud.WordCloud(background_color="white")

python遇到的模块集合的更多相关文章

  1. python常用模块集合

    python常用模块集合 Python自定义模块 python collections模块/系列 Python 常用模块-json/pickle序列化/反序列化 python 常用模块os系统接口 p ...

  2. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  3. 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)

    一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...

  4. Python的regex模块——更强大的正则表达式引擎

    Python自带了正则表达式引擎(内置的re模块),但是不支持一些高级特性,比如下面这几个: 固化分组    Atomic grouping 占有优先量词    Possessive quantifi ...

  5. #python基础学习模块:marshal 对象的序列化

    #标准库地址:https://docs.python.org/2/library/marshal.html"""有时候,要把内存中一个对象持久化保存磁盘或者序列化二进制流 ...

  6. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  7. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  8. Python中collections模块

    目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...

  9. python学习day15 模块(重点)

    模块(重点) python2,与py3的区别 py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建. py3:range() 不会再内存 ...

随机推荐

  1. 权限维持:Win2008以上的iis

    参考文章:https://mp.weixin.qq.com/s/z1d3yvp14GWakyonTh_b8A 浅谈原理 在 .Net 中,HttpModule 其实就是实现了 IHttpModule ...

  2. MySQL字段类型 约束

    目录 MySQL存储引擎 非空约束 字段类型 整形类型INT TINYINT 浮点类型float 字符类型char varchar 日期类型 枚举集合 约束条件 主键 自增 unsigned无符号 z ...

  3. [LeetCode] 917. Reverse Only Letters 只翻转字母

    Given a string S, return the "reversed" string where all characters that are not a letter  ...

  4. [LeetCode] 333. Largest BST Subtree 最大的二分搜索子树

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...

  5. [LeetCode] 269. Alien Dictionary 另类字典

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

  6. [LeetCode] 153. Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  7. ios 信任自签名证书

    1. 通过html 网络地址的方式(eg. <a href="172.26.167.82.crt">证书安装</a>)[或者通过邮件附件的方式]2. 设置- ...

  8. [BAT脚本] 1、BAT脚本FOR循环操作文件和命令返回实例

    Wednesday, 31. October 2018 08:18PM - beautifulzzzz 一.需求 需要在windows上实现一个bat脚本解析json,将json转换为自己想要的key ...

  9. 大话设计模式Python实现-简单工厂模式

    简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 #!/usr/ ...

  10. BCompare注册文件+密钥被撤销解决方案

    注册码: rssAPVg2OpBjDVo3E0DhGWrjPIq0hsTSuNz13wTuzVHfb2mRgO9bZKn9Bl42D5YEyMSYPXsxzcb08dqbRlbzWNJzJXE6YVa ...