[关闭]
@iwangyang 2016-10-11T14:31:28.000000Z 字数 10318 阅读 2804

Python 3 小甲鱼 笔记

笔记
Python / JavaScript


模块

pip

安装指南 秒懂释义
打开:https://pip.pypa.io/en/latest/installing
Ctrl + F,输入 get-pip.py 查找
$ python get-pip.py 安装
$ pip --version 检查
备注:Win + X 运行命令提示符(管理员)
命令
$ pip list 所有包
$ pip list -o 有更新
$ pip install '模块' 安装
$ pip uninstall '模块' 卸载
$ pip install --upgrade pip 升级

我的电脑 > 属性 > 高级系统设置 > 环境变量(Win+R Cmd Set)> Path > 编辑
C:
%USERPROFILE%\AppData\Local\Programs\Python\Python35\Scripts
%USERPROFILE%\AppData\Local\Programs\Python\Python35

easy_install 模块管理

安装指南 秒懂释义
打开:https://pypi.python.org/pypi/setuptools
Ctrl + F,输入 ez_setup.py 查找
$ python ez_setup.py 下载
解压 setuptools-25.2.0.zip 至 Python\Python35\Scripts 解压
$ python ez_setup.py 安装
$ easy_install --version 检查
备注:Win + X 运行命令提示符(管理员)
命令 ———
$ easy_install '模块' 安装
$ easy_install -U '模块' 更新
$ easy_install -m '模块' 卸载

pyinstaller 打包

官网 www.PyInstaller.org
下载 PyInstaller-3.2.tar.gz

  1. import os
  2. cmd = r'.\PyInstaller-3.2\pyinstaller.py --onefile Miao.py'
  3. os.system( cmd )

os 系统

属性 说明
system( string ) 执行系统命令 cmd
getcwd( ) 返回当前工作目录
chdir( path ) 改变工作目录
listdir( path='.' ) 目录中的文件名生成列表
rename( old, new ) 将文件 old 重命名 new

pickle 泡菜

  1. import pickle
  2. data= {'大海':'bigc.cc'}
  3. with open( 'FileName' , 'wb' ) as file :
  4. pickle.dump( data , file ) #倒入
  5. with open( 'FileName' , 'rb' ) as file :
  6. data = pickle.load( file ) #取出
  7. print( data )

re 正则表达式

属性 说明
search( pattern, string ) 匹配首个 pattern 用 .group() 访问
findall( pattern, string ) 查找所有 pattern 返回一个 list
finditer( pattern, string ) 查找所有 pattern 返回一个 iterable
sub( pattern, repl, string ) 在 string 中查找 pattern 替换为 repl
compile( pattern,re.VERBOSE ) 编译 正则表达式 #

元字符

字符 对应 字符 对应
. any + {1,}
* {0,} ? {0,1}
| or ^ start
$ end \ 转译

字符类

属性 说明
[ pattern ] 转译, a-z 表示范围
{ a, b } a<=b,匹配 a~b 次
( ?: pattern ) 非捕获组 常用于 findall 方法

实例

  1. IP = re.compile(r""" #愉快的举栗时间到了
  2. (
  3. (?: [01]?\d?\d | 2?[0-4]?\d | 2?5?[0-4] )\.
  4. (?: [01]?\d?\d | 2?[0-4]?\d | 2?5?[0-4] )\.
  5. (?: [01]?\d?\d | 2?[0-4]?\d | 2?5?[0-4] )\.
  6. (?: [01]?\d?\d | 2?[0-4]?\d | 2?5?[0-4] )
  7. ) #ip地址范围0到255
  8. (?: </td>\r\n\ \ \ \ <td> )
  9. ( \d?\d?\d?\d?\d ) #IP端口范围0到65535
  10. #测试网站www.xicidaili.com
  11. """, re.VERBOSE)

random 随机生成

属性 说明
randint( a, b ) 随机生成一个 a 到 b 之间的整数
choice( iterable ) 从 iterable 中抽取一项

easygui 图形用户界面

安装 pip install easygui

beautifulsoup4 网页解析

安装 pip install BeautifulSoup4
import bs4

Git Bash 安装 pip install wheel 下载 .whl 文件

http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
Ctrl + F,输入lxml

根据Python版本选择下载

pip install lxml‑3.4.4‑cp35‑none‑win_amd64.whl

属性 说明
BeautifulSoup( str, 'lxml' ) 解析 str (Python标准库 "html.parser")
BeautifulSoup
find_all( 'tag' , keyword [,text=''] )
返回 所有 网页标签 tag 包含 pattern 的 iterable
find( 'tag' , keyword ).attrs
返回 第一个 网页标签 tag 包含 pattern 的 字典

keyword = { key : pattern }

Find 说明
attrs 返回 字典
get_text( ) 返回 内容
get( key ) 返回 key 对应的值
  1. import bs4 , re , urllib.request
  2. url = 'http://baike.baidu.com/view/284853.htm'
  3. html = urllib.request.urlopen( url ).read( ) #读取
  4. soup = bs4.BeautifulSoup( html, 'lxml' ) #解析
  5. >>> soup.find( 'a',{ 'href':re.compile('view') } ).attrs #查找 key
  6. >>> {'title': '锁定', 'target': '_blank', 'href': '/view/10812319.htm', 'class': ['lock-lemma']}
  7. url = soup.find( 'a',{ 'href':re.compile('view') } )
  8. >>> url.get('href') #获取 key 对应的值
  9. >>> '/view/10812319.htm'
  10. >>> url.get_text() #获取 文字内容
  11. >>> '锁定'

json 轻量级数据交换

属性 说明
loads( str ) 载入 str 返回 字典

urllib.request 网页访问

属性 秒懂释义
urlopen( url, data=None ) 返回文件对象 data 赋值则由 GET 改为 POST
urlretrieve( url, file ) 下载文件 url 保存到文件路径 file
urlopen( ).getcode 返回 HTTP 状态码

urllib.parse 网址分解

属性 秒懂释义
quote( string [,safe='/.=:?'] ) URL 编码
unquote( string ) URL 解码

工厂函数

@decorator 装饰器

  1. def decorator( eve ) :
  2. def tor( *args, **kwargs ) :
  3. print( '在这里 添加 装饰' )
  4. return eve( *args, **kwargs )
  5. ''' eve( *args, **kwargs ) == eve '''
  6. return tor
  7. def jia( a, b ):
  8. print( '正在调用 jia 函数' )
  9. return a+b
  10. @decorator #装饰器
  11. def mer( eve ) :
  12. return eve

>>> x = mer( jia( 2, 3 ) )
正在调用函数 jia( )
在这里 添加 装饰
>>> x
5
>>> y = mer( 'everything' )
在这里 添加 装饰
>>> y
'everything'

yield 生成器

  1. iterable = [1, 2, 3]
  2. def mer( iterable ):
  3. for i in iterable :
  4. yield i
  5. a = mer( iterable )
  6. >>> next(a)
  7. >>> 1

List 列表

属性 秒懂释义
index( ) 查找 (sub) 并返回参数索引值
append( ) 在末尾添加一个元素
extend( ) 在微末添加一个列表
count( ) 返回元素数量
remove( ) 删除一个元素
pop( [index] ) 剪切一个元素 默认最后一个
sort( ) 顺序排列 由小到大
insert( index, value ) 在指定位置插入一个元素
copy( ) 拷贝
clear( ) 清空
reverse( ) 原地翻转所有元素
备注 加粗 元组Tuple 通用

Str 字符串

格式化 / 转译

属性 秒懂释义
lstrip ( ) 去掉左边所有空格
join ( ) 把 (sub) 为分隔符插入字符串中
endswith ( ) 查找 ( sub,[start,end] ) 是否为结尾 返回True或False
center ( ) 居中,并用空格填充长度 (width)
startswith ( ) 检查是否以 (sub) 为开头 可选范围
islower ( ) 判断是否 只有一个大写 其余小写
title ( ) 所有单词首字母大写 其余小写
rjust ( ) 左对齐 并在右边填充长度为 (width) 的空格
ljust ( ) 左对齐 并在右边填充长度为 (width) 的空格
find ( ) 查找 (sub) 是否存在 返回 (index) 否则返回 -1
lower ( ) 所有大写 改为小写
index ( ) 查找 (sub) 是否存在 返回 (index) 否则报错
isnumeric ( ) 判断是否都为 数字字符
splitlines ( ) 以 \n 为分隔符 返回列表
isdecimal ( ) 判断是否都为 十进制数字
isdigit ( ) 判断是否都为 数字
zfill ( ) 右对齐 长度为 (width) ,前面用零填充
count ( ) 查找 (sub) 出现的次数 ( sub,[start,end] ) 表示范围
isalpha ( ) 判断是否都为 字母
casefold ( ) 所有字符小写
capitalize ( ) 第一个字符改为大写
rstrip ( ) 删除末尾空格
swapcase ( ) 翻转大小写
partition ( ) 将字符串变成一个元组 ( 之前 ,(sub), 之后 )
isspace ( ) 判断是否都为 空格
expandtabs ( ) 将 \t 转换为 空格space 默认为8个空格
isalnum ( ) 判断是否都为 字母和数字
istitle ( ) 判断是否都为 标题(首字母大写 其余小写)
translate ( ) 通过 ( str.maketrans ('a','b') )定制规则,替换字符
replace ( ) 全部替换 旧(sub) , 新(sub)
isupper ( ) 判断是否都为 大写
upper ( ) 小写为大写
split ( ) 以 (sub) 为分隔符 默认为空格 返回列表
strip ( ) 删除前后所有 (sub) 默认为空格

Map 遍历

  1. map ( function , *iterable )
  2. >>> def a( x , y ) : return x + y # a -> function
  3. >>> b = map( a , '1357' , '2468' ) # b -> *iterable
  4. >>> [ i for i in b ]
  5. >>> ['12', '34', '56', '78']

Filter 过滤

  1. filter ( function or None , iterable )
  2. >>> def a( x ) : return x % 2 !=0 # a -> function
  3. >>> b = filter( a , range(15) ) # b -> iterable
  4. >>> [ i for i in b ]
  5. >>> [1, 3, 5, 7, 9, 11, 13]

Set 集合

  1. set ( iterable )
  2. >>> set ( [1,1,2,3,4,5] )
  3. >>> {1,2,3,4,5}

lambda 创建匿名函数

  1. a =lambda x : x * 2
  2. >>> a(3)
  3. >>> 6
  4. b = lambda x, y, z : ( x - y ) * z
  5. >>>b(3,1,3)
  6. >>> 6

参数说明

属性 秒懂释义
function 函数
iterable 可迭代对象
path 路径
url 网址
pattern 正则表达式
string 字符串
sub 子值

Cmd Markdown 简明语法手册

文件对象

属性 秒懂释义
read( size=-1 ) 从当前位置读取 size 字符
readline( [size=-1] ) 读取一行 如果 size 有定义 返回 size 个字符
write( str ) 写入字符串 str
tell( ) 返回当前位置
seek( from ) 指针移动到 from,0 起始 1 当前 2 末尾

异常总结

属性 秒懂释义
AssertionError 断言语句(assert)失败
AttributeError 尝试访问未知的对象属性
TypeError 不同类型间的无效操作
urllib.error.URLError 网页打不开 或 网络异常

开发

$ cd c:\Flasky

$ python -m venv venv

$ c:\Flasky\venv\Scripts\activate.bat #进入

$ deactivate #退出

  1. @echo off
  2. echo python hello.py----Hasaki - 面对疾风吧!
  3. cd c:\Flasky
  4. start /b venv\Scripts\activate.bat
  1. C:\Flasky\venv\Scripts\pythonw.exe "%UserProFile%\AppData\Local\Programs\Python\Python35\Lib\idlelib\idle.pyw"

官方文档 英文
Flask Web框架 Frame
Jinja2 模板引擎 Template Engine
Werkzeug WSGI 套件 WSGI Toolkit

Git 分布式版本控制系统

$ 命令 说明
$ git init 初始化
$ git commit -am '注释' 提交
$ git status 查看 状态
$ git diff 查看 修改内容
$ git log 历史提交
$ git rm 删除提交
$ git checkout . 清空修改
$ git reflog 查看 历史快照
$ git reset --hard d606daf 恢复快照
$ git push -u origin master 发送 所有内容
$ git push origin master 发送 最新修改
- -
$ git branch 查看 分支
$ git branch dev 创建
$ git checkout dev 切换
$ git merge --no-ff -m '注释' dev 合并
$ git branch -d dev 删除
$ git branch -a 查看 远程分支
$ git checkout -b dev origin/dev 提取 远程分支
- -
$ git tag 查看 标签
$ git tag v1.0 创建
$ git tag -d v1.0 删除
$ git tag v1.0 d606daf 创建 指定
$ git tag -a v1.0 -m '注释' d606daf 创建 注释
$ git show v1.0 查看 说明
$ git push origin v1.0 发送 远程标签
$ git push origin --tags 发送 所有标签
$ git push origin :refs/tags/v1.0 删除 远程标签
-
$ git log --graph --pretty=oneline --abbrev-commit 分支合并图
$ git checkout -b 创建并切换
$ git log --pretty=oneline --abbrev-commit 历史提交

Github 远程仓库

-
设置 环境变量
%ProgramFiles%\Git\cmd
设置 SSH keys
$ ssh-keygen -t rsa -C "iwangyang@qq.com"
关联一个远程库
$ git remote add origin https://github.com/BIGC-HUB/Python.git
推送所有内容
$ git push -u origin master
克隆至本地仓库
$ cd C:\
$ git clone git@github.com:BIGC-HUB/Python.git

.gitignore 忽略特殊文件

配置语法 说明 示例
/ 表示目录 /venv
* 多个字符 *.egg
? 单个字符 *.py?
# 注释 # Config:
[ ] 包含单个字符的列表 *.py[cod]
! 不忽略的文件或目录 !/hello.py

Linux 命令 说明
$ cd 路径 改变工作目录
$ mkdir 目录 创建工作目录

Pyhton 实例

喵图

  1. import re, urllib.request, os, sys, random
  2. def new ( ) :
  3. '''获取最新地址'''
  4. try :
  5. url = urllib.request.Request('http://jandan.net/ooxx/')
  6. url.add_header ( 'User-Agent' , 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/7.2.0.12990' ) #隐藏
  7. html = urllib.request.urlopen( url )
  8. except ( urllib.error.URLError ) :
  9. print( '网页打不开,请稍后 (或检查网络)' )
  10. sys.exit(0)
  11. miao = html.read( ).decode( 'UTF-8' )
  12. miao= re.search( '<span class="current-comment-page">\[(.+?)\]</span>' , miao ).group(1)
  13. return miao
  14. def img ( url ) :
  15. '''打开网页并解析'''
  16. url = urllib.request.Request( url )
  17. url.add_header ( 'User-Agent' , 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/7.2.0.12990' ) #隐藏
  18. miao = urllib.request.urlopen( url ).read( ).decode( 'UTF-8' )
  19. img = re.findall( '<img src="(.+?)" /></p>' , miao )
  20. return img
  21. def down ( miao ) :
  22. '''下载图片并保存'''
  23. url = r'http://jandan.net/ooxx/page-%s#comments' % miao
  24. if not os.path.exists( r'.\miao' ) :
  25. os.makedirs( r'.\miao' )
  26. for url in img( url ) :
  27. urllib.request.urlretrieve( url , '.\miao\%s.jpg' % random.choice( range( int(1e+18) -1 ) ) )
  28. def kaishi ( ) :
  29. '''开始么'''
  30. miao = int( new( ) )
  31. print('最新页面地址:%s' % miao )
  32. while True :
  33. try :
  34. miao = int ( input ( '——————————\n第几页开始:' ) )
  35. x = int( input ( '要下载几页:' ) )
  36. break
  37. except ( ValueError ) :
  38. print( '请输入整数' )
  39. print( '正在下载 (~ ̄▽ ̄)~* 请耐心等候' )
  40. try :
  41. for i in range( x ) :
  42. down( miao - i )
  43. print( '第 %s 页完成' % ( miao - i ) )
  44. except ( urllib.error.URLError ) :
  45. print( '网页打不开 (╯▔皿▔)╯ 请稍后 (或检查网络)' )
  46. sys.exit(0)
  47. print( '\n完成 (●ˇ∀ˇ●) 保存在 %s\miao' % os.getcwd( ) )
  48. if __name__ == '__main__' :
  49. kaishi( )
  50. #本 程 序 用 于 抓 取 页 面 图 片 JianDan.net/OOXX

TS 视频文件下载/合并

澎湃新闻地址 视频地址
Google Chrome F12 -> Network -> Copy all as AHR -> TsFile.txt

  1. import urllib.request
  2. with open ('TsFile.txt','w') as tsfile : #解析
  3. with open ( 'TSdata.txt' ) as file :
  4. for i in file :
  5. if '.ts' in i :
  6. tsfile.write( '%s\n' % i[18:-3] )
  1. import urllib.request
  2. with open ('TsFile.txt' ) as ts : #下载
  3. for url in ts :
  4. local = r'.\SELF2016\%s' % url[81:-1]
  5. urllib.request.urlretrieve( url , local )
  1. import os #当前目录
  2. cmd = r'copy /b .\SELF2016\*.ts .\SELF2016.ts'
  3. os.system( cmd )

有道翻译

Google Chrome F12 -> Network -> Method.POST -> Request URL / Request Headers / Form Data

  1. import urllib.request , urllib.parse , json
  2. fanyi = input('输入要翻译的内容:')
  3. url = urllib.request.Request('http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null')
  4. url.add_header ( 'User-Agent' , 'Mozilla/5.0' )
  5. data = {
  6. 'type' : 'AUTO' ,
  7. 'i' : fanyi ,
  8. 'doctype' : 'json' ,
  9. 'xmlVersion' : '1.8' ,
  10. 'keyfrom' : 'fanyi.web' ,
  11. 'ue' : 'UTF-8' ,
  12. 'action' : 'FY_BY_CLICKBUTTON' ,
  13. 'typoResult' : 'true' }
  14. data = urllib.parse.urlencode(data).encode( 'utf-8' )
  15. result = urllib.request.urlopen( url ,data ) #POST 发送请求
  16. result = result.read( ).decode( 'utf-8' ) #读取结果
  17. result = json.loads( result ) #读取 json 数据交换格式
  18. print( result['translateResult'][0][0]['tgt'] )

素数

  1. def su( n ) :
  2. num = list(range(n+1)) #初始化列表
  3. for i in range( 2, n+1 ) :
  4. for k in num[ i+1 : n+1 ] :
  5. if k % i == 0 :
  6. num[k] = 0
  7. return [ i for i in num[2:] if i != 0 ]
  8. print ( su(100) ) #100以内素数

网页编码 \ 转译

文件编码

  1. with open( '123.txt' , 'rb' ) as file : # 二进制读取
  2. file = file.read().decode() #解码

网页编码

  1. import urllib.request , chardet
  2. while True : #查询网页
  3. try :
  4. url = input('请输入URL:')
  5. if url[:4] != 'http' :
  6. url = 'http://' + url
  7. url = urllib.request.Request( url ) #隐藏
  8. url.add_header ( 'User-Agent' , 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/7.2.0.12990' )
  9. page = urllib.request.urlopen( url ).read( )
  10. break
  11. except ( urllib.error.URLError , NameError ):
  12. print('网页打不开,请重新输入(或检查网络)')
  13. code = chardet.detect( page )['encoding'] #查询编码
  14. if code == 'GB2312' :
  15. code = 'GBK'
  16. print( '您输入的网页编码为:' , code )
  17. page = page.decode( code,'ignore' ) #解码
  18. with open('123.txt' ,'w',encoding= code) as file :
  19. file.write( page )

Python 库

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注