import

OS

import os#自动选择不同系统的文件模块
os.listdir()#获取当前目录下的所有文件名
os.getcwd()#返回当前的工作目录
os.chdir()#切换工作目录
os.listdir()#列举目录的文件名
os.mkdir()#创建目录
os.makedirs()#递归创建多层目录
os.remove()#删除文件
os.removedirs()#递归删除目录,从子目录到付目录逐层尝试删除,遇到目录非空抛出异常
os.rmdir()#删除单层目录(目录必须是空的)
rename()#重命名文件
system()#运行系统的shell窗口
以下是支持路径操作中常用的一些定义,支持所有平台
os.cuidir()#指代当前目录('.')
os.pardir()#指代上一级目录
os.sep()#输出操作系统指定的路径分隔符(win:'\\', linux:'/')
os.linesep()#当前平台使用的行终止符(win:'\r\n', linux:'\n')
os.name#指代当前使用的操作系统

os.path

import os
os.path.basename(path)#去掉目录路径,单独返回文件名
os.path.dirname(path)#去掉文件名,返回路径
os.path.join(path1, path2, ……)#将各个目录名组合成路径,盘符需要自己加上\\
os.path.split(path)#将路径和文件名分开
os.path.splitext(path)#分离文件名和扩展名
os.path.getsize(file)#返回尺寸
os.path.geiatime(file)#返回指定文件的最近访问时间(浮点型秒数,使用time模块的gmtime()或localtime()函数换算)
os.path.getctime(file)#返回指定文件的创建时间(浮点型秒数,使用time模块的gmtime()或localtime()函数换算)
os.path.getmtime(file)#返回指定文件最新的修改时间(浮点型秒数,使用time模块的gmtime()或localtime()函数换算)
#判断
os.path.exists(path)#判断指定路径(文件/目录)是否存在
os.path.isabs(path)#判断指定路径是否为绝对路径
os.path.isdir(path)#判断指定路径是否存在且是一个目录
os.path.isfile(path)#判断指定路径是否存在且是一个文件
os.path.islink(path)#判断指定路径是否存在且是一个符号链接(快捷方式)
os.path.ismount(path)#判断指定路径是否存在且是一个挂载点(盘符)
os.samefile(path1, path2)#判断path1和path2两个路径是否指向同一个文件

pickle

import pickle
#将很长的数据保存到文件中
picking存放
#---------------------------------------------------------
my_list = []
pickle_file = open('my_list.pkl', 'wb')#后缀名随意
pickle.dump(my_list, pickle_file)#将列表中的内容放入文件
pickle.close(pickle_file)
#---------------------------------------------------------
unpicking读取
#---------------------------------------------------------
pickle_file = open('my_list.pkl', 'rb')
my_list = pickle.load(pickle_file)#将文件中的内容放入列表
pickle.close(pickle_file)
#---------------------------------------------------------

time

import time
time.gmtime()#换算为世界时间
time.localtime()#换算为当前的计算机时间,返回struct_time时间元组
time.perf_counter()
time.perf_counter()

sys

import sys
sys.exit(0)
sys.getdefaultencoding()#获得当前的默认编码

random

import random
random.randint(1, 10)//返回一个随机的整数

math

math.sqrt()#开根号

timeit

timeit 模块提供了测量 Python 小段代码执行时间的方法。它既可以在命令行界面直接使用,也可以通过导入模块进行调用。该模块灵活地避开了测量执行时间所容易出现的错误。
timeit.timeit(stmt = 'pass', setup = 'pass', timer = , number = 1000000)
timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None)
创建一个 Timer 实例,参数分别是 stmt(需要测量的语句或函数),setup(初始化代码或构建环境的导入语句),timer(计时函数),number(每一次测量中语句被执行的次数) 注:由于 timeit() 正在执行语句,语句中如果存在返回值的话会阻止 timeit() 返回执行时间。timeit() 会取代原语句中的返回值。
timeit.repeat(stmt='pass', setup='pass', timer=, repeat=3, number=1000000)
repeat(stmt='pass', setup='pass', timer=, repeat=5, number=1000000, globals=None)
创建一个 Timer 实例,参数分别是 stmt(需要测量的语句或函数),setup(初始化代码或构建环境的导入语句),timer(计时函数),repeat(重复测量的次数),number(每一次测量中语句被执行的次数)
timeit.default_timer()
默认的计时器,一般是 time.perf_counter(),time.perf_counter() 方法能够在任一平台提供最高精度的计时器(它也只是记录了自然时间,记录自然时间会被很多其他因素影响,例如计算机的负载)
class timeit.Timer(stmt='pass', setup='pass', timer=)
Timer(stmt='pass', setup='pass', timer=, globals=None)
计算小段代码执行速度的类,构造函数需要的参数有 stmt(需要测量的语句或函数),setup(初始化代码或构建环境的导入语句),timer(计时函数)。前两个参数的默认值都是 'pass',timer 参数是平台相关的;前两个参数都可以包含多个语句,多个语句间使用分号(;)或新行分隔开。
第一次测试语句的时间,可以使用 timeit() 方法;repeat() 方法相当于持续多次调用 timeit() 方法并将结果返回为一个列表。
stmt 和 setup 参数也可以是可供调用但没有参数的对象,这将会在一个计时函数中嵌套调用它们,然后被 timeit() 所执行。注意,由于额外的调用,计时开销会相对略到。
timeit.Timer.timeit(number=1000000)
timeit(self, number=1000000)
功能:计算语句执行 number 次的时间。
它会先执行一次 setup 参数的语句,然后计算 stmt 参数的语句执行 number 次的时间,返回值是以秒为单位的浮点数。number 参数的默认值是一百万,stmt、setup 和 timer 参数由 timeit.Timer 类的构造函数传递。
注意:默认情况下,timeit() 在计时的时候会暂时关闭 Python 的垃圾回收机制。这样做的优点是计时结果更具有可比性,但缺点是 GC(garbage collection,垃圾回收机制的缩写)有时候是测量函数性能的一个重要组成部分。如果是这样的话,GC 可以在 setup 参数执行第一条语句的时候被重新启动,例如:
timeit.Timer('for i in range(10): oct(i)', 'gc.enable()').timeit()
timeit.Timer.repeat(repeat=3, number=1000000)
repeat(self, repeat=5, number=1000000)
功能:重复调用 timeit()。
repeat() 方法相当于持续多次调用 timeit() 方法并将结果返回为一个列表。repeat 参数指定重复的次数,number 参数传递给 timeit() 方法的 number 参数。
注意:人们很容易计算出平均值和标准偏差,但这并不是非常有用。在典型的情况下,最低值取决于你的机器可以多快地运行给定的代码段;在结果中更高的那些值通常不是由于 Python 的速度导致,而是因为其他进程干扰了你的计时精度。所以,你所应感兴趣的只有结果的最低值(可以用 min() 求出)。
timeit.Timer.print_exc(file=None)
print_exc(self, file=None)
功能:输出计时代码的回溯(Traceback)
典型的用法:
t = Timer(...) # outside the try/except
try:
t.timeit(...) # or t.repeat(...)
except Exception:
t.print_exc()
标准回溯的优点是在编译模板中,源语句行会被显示出来。可选的 file 参数指定将回溯发送的位置,默认是发送到 sys.stderr。

chardet:

使用它就可以检测字符串的编码
chardet 模块可以检测以下编码:
  • ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
  • Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
  • EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese)
  • EUC-KR, ISO-2022-KR (Korean)
  • KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
  • ISO-8859-2, windows-1250 (Hungarian)
  • ISO-8859-5, windows-1251 (Bulgarian)
  • windows-1252 (English)
  • ISO-8859-7, windows-1253 (Greek)
  • ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
  • TIS-620 (Thai)
GBLK兼容GB2312,出现GB2312时,使用GBK解码即可
detect()#判断字符串的编码
import chardet
import urllib.request
url = urllib.request.urlopen("http://www.fishc.com").read()
print(chardet.detect(url))

json:

loas()

locale:

locale.getpreferredencoding()

Beautiful Soup:(分清类型操作,从网页中读取的内容是str,可以直接find)

Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautiful Soup 会帮你节省数小时甚至数天的工作时间
from bs4 import BeautifulSoup
BeautifulSoup对象只有一个子节点html
BeautifulSoup对象父节点是None
print(soup.prettify())# 能按照标准的缩进格式的结构输出
soup.title
soup.title.name
soup.title.string
soup.title.parent.name
soup.p
soup.p['class']
soup.a
soup.find_all('a')
soup.find(id = 'link3')
从文档中找到所有标签的链接:
for link in soup.find_all('a'):
print(link.get('href'))
从文档中获取所有文字内容:
print(soup.get_text())
[InvalidCharacterError: "'bs4.element.resultset'" did not match the Name production]

四种对象:

Tag:标签
tag.contens#该属性可以将tag的子节点以列表的方式输出(第一个子节点)
tag.string#只有一个子节点或只有一个NavigableString类型子节点, 多个子节点返回None
tag.children#生成器,可以对tag的子节点进行循环
tag.descendants#可以对所有的tag的子孙节点进行递归循环
tag.strings#获取tag中包含的多个字符串
tag.stripped_strings#获取tag中包含的多个字符串, 去除多余的空白内容(全是空格,段首和段末的空白)
tag.parent#获取某个元素的父节点
tag.parents#可以递归得到元素所有父辈结点
tag.next_sibling#下一个兄弟节点,需要调用两次才能得到,',\n'也是兄弟节点
tag.previous_sibling#上一个兄弟节点,需要调用两次才能得到
tag.next_siblings#对当前的兄弟节点进行迭代输出
tag.previous_siblings#对当前的兄弟节点进行迭代和输出
tag.next_element#指向解析过程中下一个被解析的对象(字符串或tag)
tag.previous_element#指向被解析对象的前一个对象
tag.next_elements#向后访问文档的解析内容
tag.previous_elements#向前访问文档的解析内容
find()
tag.find_all()
find_all( name , attrs , recursive , string , **kwargs )
#过滤器:字符串
soup.find_all('b')#查找所有的标签
#可以传入正则表达式
#传入列表,返回与列表内容匹配的任意元素
soup.find_all(["a", "b"])#找到所有的标签
#True作为参数,返回所有的tag,但不会返回字符串结点
#可以定义一个函数,返回True表示找到,返回False表示不是
def has_class_but_no_id(tag): return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
NavigableString:
BeautifulSoup:
Comment:

urllib.request:

re:

re.search()#待匹配字符串,源字符串
re.findall()#将所有匹配的字符返回,列表,如果有分组,只会返回分组的内容,加上(?……)将不会只返回分组内容(非捕获组)
re.match()
re.finditer()
re.compile()#生成一个可供search/match使用的正则表达式, 被编译成模式对象, 可以直接调用函数匹配
search()
findall()#返回一个列表对象
match()
finditer()#返回一个迭代器
>>> import re
>>> p = re.compile('[a-z]+')
>>> p
re.compile('[a-z]+')
>>> p.match("")
>>> print(p.match(""))
None
>>> m = p.match('fishc')
>>> m
<_sre.SRE_Match object; span=(0, 5), match='fishc'>
匹配得到的对象:
group()
groups()
start()
end()
span()
>>> m.group()
'fishc'
>>> m.start()
0
>>> m.end()
5
>>> m.span()
(0, 5)

编译标志:

re.I | re.M #就是同时设置 I 和 M 标志
ASCII, A使得转义符号如 \w,\b,\s 和 \d 只能匹配 ASCII 字符
DOTALL, S使得 . 匹配任何符号,包括换行符
IGNORECASE, I匹配的时候不区分大小写
LOCALE, L支持当前的语言(区域)设置
MULTILINE, M多行匹配,影响 ^ 和 $
VERBOSE, X (for 'extended')启用详细的正则表达式

Scrapy:

爬虫框架