• python遇到的模块集合


    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()

    输出结果为:

    1574825443441

    插入单条数据

    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()

    输出结果为:

    1574826008736

    获取最新插入数据

    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()

    输出结果为:

    1574826531931

    1574826555820

    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()

    输出结果为:

    1574826989683

    更改数据

    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()

    输出结果为:

    1574827228280

    查新数据

    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")

    查询结果为:

    1574830700548

    1574830690077

    数据回滚

    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()

    运行结果为:

    1574844220336

    1574844201591

    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")
  • 相关阅读:
    Linux Shell编程(25)——I/O 重定向
    Linux Shell编程(24)——命令替换
    Linux Shell编程(23)——文本处理命令
    Linux Shell编程(22)——时间/日期 命令
    Linux Shell编程(21)——复杂命令
    玩转大数据,顺利渡过34岁裁退危机!
    传统企业IT架构如何能更好的支撑企业互联网业务的转型
    业务技术协同线上化的硬盘式研发管理实践
    做一个美女图片大全那种的网站怎么提高网站流量?
    Eclipse曾经的行业之王,为何堕落了?
  • 原文地址:https://www.cnblogs.com/erlchixiha/p/11937793.html
Copyright © 2020-2023  润新知