一、分詞 - jieba
- 優秀的中文分詞庫,依靠中文詞庫,利用詞庫確定漢子之間關聯的概率,形成分詞結果
import jieba
word = '偉大的中華人民共和國'
jieba.cut(word)
jieba.lcut(word)
二、詞雲庫 - wordcloud
- 對資料中出現頻率較高的
關鍵詞
生成的一幅影象,予以視覺上的突出
import jieba
import numpy as np
import PIL.Image as Image
from wordcloud import WordCloud
def run(word_path, picture_path):
with open(word_path, 'r') as f:
word = f.read()
cut_word = ' '.join(jieba.cut(word))
color_mask = np.array(Image.open(picture_path))
word_cloud = WordCloud(
# 設定字型,不指定就會出現亂碼
font_path='/System/Library/Fonts/PingFang.ttc',
# 設定背景色
background_color='white',
# 詞雲形狀
mask=color_mask,
# 允許最大詞彙
max_words=120,
# 最大號字型
max_font_size=2000
).generate(cut_word)
word_cloud.to_file('word_cloud.jpg')
im = word_cloud.to_image()
im.show()
三、視覺化進度條 - tpdm
- 好看的進度條,不僅會讓人一眼就知道任務的進度,還能夠讓自己的心情愉悅
from time import sleep
from tqdm import tqdm
# 這裡同樣的,tqdm就是這個進度條最常用的一個方法
# 裡面存一個可迭代物件
for i in tqdm(range(1, 500)):
# 模擬你的任務
sleep(0.01)
sleep(0.5)
四、優美的表格 - PrettyTable
import prettytable as pt
# 按行新增資料
tb = pt.PrettyTable()
tb.field_names = ['name', 'age', 'height', 'weight']
tb.add_row(['亮仔', 25, 174, 65])
tb.add_row(['程式設計師', 23, 164, 55])
tb.add_row(['程式設計師亮仔', 27, 184, 69.5])
print(tb)
# +-----------+-----+--------+--------+
# | name | age | height | weight |
# +-----------+-----+--------+--------+
# | 亮仔 | 25 | 174 | 65 |
# | 程式設計師 | 23 | 164 | 55 |
# | 程式設計師亮仔 | 27 | 184 | 69.5 |
# +-----------+-----+--------+--------+
五、多程序 - multiprocessing
from multiprocessing import Process
def func(s):
print(s)
if __name__ == '__main__':
process = [
Process(target=func, args=('1', ))
Process(target=func, args=('2', ))
]
[p.start() for p in process]
[p.join() for p in process]
六、多執行緒 - threading
import threading
def func(s):
print(s)
if __name__ == '__main__':
thread = [
threading.Thread(target=func, args=('1', ))
threading.Thread(target=func, args=('2', ))
]
[t.start() for t in thread]
[t.join() for t in thread]
七、谷歌翻譯 - googletrans
from googletrans import Translator
translator = Translator()
# 未提供源語言以及翻譯的最終語言,會自動翻譯成英文
translator.translate('안녕하세요.')
# 告訴它翻譯成什麼語言
translator.translate('안녕하세요.', dest='ja')
# 告訴它源語言是什麼
translator.translate('程式設計師亮仔', src='zh-cn')
# 語言檢測
t = ttranslator.detect('이 문장은 한글로 쓰여졌습니다.')
t.lang
八、重複回撥 - retrying
- 如果請求失敗,我們需要再重新進行進行請求,防止請求異常導致資料缺失
from retrying import retry
@retry(stop_max_attempt_number=5)
def say():
try:
cxyliangzai
except Exception as e:
# 可以將錯誤記錄紀錄檔
print(e)
raise
say()
九、遊戲開發 - pygame
- 實現 python 遊戲的開發,可以開發各種大小型遊戲
import pygame, sys
from pygame.locals import *
# 初始化pygame
pygame.init()
# 設定視窗的大小,單位為畫素
screen = pygame.display.set_mode((500,400), 0, 32)
# 設定視窗的標題
pygame.display.set_caption('使用者事件監控')
# 設定背景
screen.fill((255, 255, 255))
# 程式主迴圈
while True:
# 獲取事件
for event in pygame.event.get():
# 判斷事件是否為退出事件
if event.type == QUIT:
# 退出pygame
pygame.quit()
# 退出系統
sys.exit()
# 獲得鍵盤按下的事件
if event.type == KEYDOWN:
if(event.key==K_UP or event.key==K_w):
print("上")
if(event.key==K_DOWN or event.key==K_s):
print("下")
if(event.key==K_LEFT or event.key==K_a):
print("左")
if(event.key==K_RIGHT or event.key==K_d):
print("右")
# 按下鍵盤的Esc鍵退出
if(event.key==K_ESCAPE):
# 退出pygame
pygame.quit()
# 退出系統
sys.exit()
# 獲得滑鼠當前的位置
if event.type ==MOUSEMOTION:
print(event.pos)
# 獲得滑鼠按下的位置
if event.type ==MOUSEBUTTONDOWN:
print("滑鼠按下:", event.pos)
# 獲得滑鼠擡起的位置
if event.type ==MOUSEBUTTONUP:
print("滑鼠擡起:", event.pos)
# 繪製螢幕內容
pygame.display.update()
十、繪圖教學 - turtle
from turtle import *
colors = ['red', 'purple', 'blue', 'green', 'yellow', 'orange']
for x in range(360):
pencolor(colors[x % 6])
width(x / 100 + 1)
forward(x)
left(59)
十一、資料分析 - pandas
- 資料分析處理庫,為解決資料分析任務而建立的,能夠快速便捷地處理資料的函數和方法
import pandas as pd
info = pd.read_csv("students.csv", encoding = "utf-8")
# 檢視資料框的一些屬性:最大、最小、均值、四分位數等
info.describe()
# 空值相關的操作
pin = info["pin"]
pin_isnull = pd.isnull(pin)
pin_isnull_list = info[pin_isnull]
len(pin_isnull_list)
# 缺失值相關操作, 簡單的處理辦法就是過濾掉null值
books = info["life_cycle_books"]
book_isnull = pd.isnull(books)
book_list_isnull = info["life_cycle_books"][book_isnull == False]
mean = sum(book_list_isnull) / len(book_list_isnull)
# 刪除缺失值, 所有行
na_info = info.dropna(axis = 1)
# 刪除缺失值, 可以指定列
na_info = info.dropna(axis = 0, subset = ["age", "name"])
十二、演演算法加密 - pycryto
- pycryto 能實現大致 3 種型別的資料加密(單向加密、對稱加密 和非對稱加密),產生亂數,生成金鑰對,數位簽章
from Crypto.Hash import SHA256
hash = SHA256.new()
hash.update('Hello, World!')
# 使用digest()方法加密
digest = hash.digest()
# 使用hexdigest()方法加密,該方法加密後是16進位制的
hexdigest = hash.hexdigest()
print(digest, hexdigest)
十三、操作 win 電腦 - pywin32
- pywin32 包裝了 Windows 系統的 Win32 API,能建立和使用 COM 物件和圖形視窗介面
import win32api
import win32con
hid = win32gui.WindowFromPoint((100, 100))
# 獲取視窗標題
title = win32gui.GetWindowText(hid)
# 獲取視窗類名
class_name = win32gui.GetClassName(hid)
# 模擬滑鼠在(400, 500)位置進行點選操作
point = (400, 500)
win32api.SetCursorPos(point)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)
十四、自動程式測試 - Selenium
- Selenium 是一個用於 Web 應用程式測試的工具。Selenium 測試直接執行在瀏覽器中,就像真正的使用者在操作一樣
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 初始化谷歌瀏覽器
driver = webdriver.Chrome()
# 最大化視窗
driver.maximize_window()
# 開啟頭條登陸網址
driver.get('https://sso.toutiao.com')
# 等待某個元素是否出現
WebDriverWait(self.driver, 10).until(
EC.text_to_be_present_in_element((By.XPATH, '//*[@id="mobile-code-get"]/span'), u'傳送')
)
# 範例化滑鼠操作
action = ActionChains(self.driver)
# 按住滾軸
action.click_and_hold(self.driver.find_element_by_xpath('//*[@id="captcha_container"]')).perform()
# 將滾軸移動x的距離
action.move_by_offset(xoffset=x, yoffset=0).perform()
# 釋放滾軸
action.release().perform()
十五、音訊播放 - mp3play
- 一款超級小型的音訊操作庫,可以實現播放音樂,按空格鍵實現暫停和播放的切換
import mp3play
clip = mp3play.load('music.mp3')
clip.play()
十六、網頁解析 - BeautifulSoup
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p class="name nickname user"><b>i am cxyliangzai</b></p>', 'html.parser')
#獲取整個p標籤的html程式碼
print(soup.p)
#獲取b標籤
print(soup.p.b)
#獲取p標籤內容,使用NavigableString類中的string、text、get_text()
print(soup.p.text)
#返回一個字典,裡面是多有屬性和值
print(soup.p.attrs)
#檢視返回的資料型別
print(type(soup.p))
#根據屬性,獲取標籤的屬性值,返回值為列表
print(soup.p['class'])
#給class屬性賦值,此時屬性值由列表轉換為字串
soup.p['class']=['Web','Site']
print(soup.p)
十七、紀錄檔處理 - logging
import logging
logging.basicConfig(filename='logging.text', level=logging.DEBUG)
logging.debug('It is a debug')
logging.info('It is a info')
logging.warning('It is a warning')
十八、影象處理 - PIL
- 非常適合於影象歸檔以及影象的批次處理任務。可以使用 PIL 建立縮圖,轉換影象格式,列印影象等等
from PIL import Image
im = Image.open("picture.jpg")
new_im = im.convert('L')
print(new_im.mode)
new_im.show()
十九、傳送郵件 - yagmail
- 是一種非常簡單用來實現自動發郵件功能的包,可以實現給單人或者多人同時傳送郵件
import yagmail
# 連結郵箱伺服器
yag = yagmail.SMTP( user='郵箱地址', password='登入密碼', host='smtp.163.com')
# 郵箱正文
contents = ['郵件第一行內容', '郵件第二行內容', '郵件第三行內容']
# 給使用者傳送郵件並新增多個附件
yag.send(['目標郵箱地址1', '目標郵箱地址2', '目標郵箱地址3'], '郵件標題', contents, ['c://附件.pdf', 'c://picture.jpg'])
二十、原始碼打包 - pyinstaller
- 將原始碼打包成exe檔案,直接在window上執行
pyinstaller -F -w -p ./lib -i logo.ico main.py