Python变量作用域
- 能否直接在函数里直接修改全局变量?(不能,global)
常用的python库:
- 下载常用库方法:
- pip指定源安装:
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i http://mirrors.aliyun.com/pypi/simple
math库
- 如何查看一个模块中包含那些函数?(dir(math));
- 如何查看某个函数的使用方法?(help(math.ceil));
random库
- random.randint(2);
- random.random();
- random.sample(2);——返回某个区间的n 个样本
- random.shuffle(list);——打乱n 个样本并返回
datetime库
- datetime.now();
- datetime.now();strftime('%a,%b,%d,%Y,%M,%D');
- datetime.now().timestamp();——返回当前时间的时间戳,即从新纪元(1970年1月1日0时0分0秒)开始到当前的秒数
- datetime.fromtimestamp(datetime.now().timestamp()); 将时间戳转换为当前时区时间
序列及其特性
- 序列包括哪些?——字符串、列表、元组等;
- 序列的内置函数介绍:
- enumerate():按(索引,序列元素)返回序列内容
- zip(iterate,): 传入多个可迭代对象,将对象中的元素按位置打包成一个一个元组,然后返回元组的列表
列表简介
- 列表是可扩展的;[].append() [].extend()
- 列表支持不同类型元素:a= [1,'1',a]
- 动态创建列表:[(x+1,y+1) for x in range(2) for y in range(2)]
字典及其特性
- 字典默认value初始化: a = {}.fromkeys(('a','b'),30)
- 字典生成方式:dict(任何具有联系的元组)
- 字典的应用:
- json字符串的生成和解析;
- 搜索引擎关键字查询-url指定参数:
百度搜索引擎关键字查询样例:https://www.baidu.com/s?wd=%s
import requests
kv = {'wd':'Python dict'}
url = 'https://www.baidu.com/s'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;1=0.9,*/*;1=0.8',
'Host':'movie.douban.com',
'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}
r = requests.get(url, headers = headers, params=kv)
异常
- 查看异常类:dir(builtins);
- Except是所有异常的基类;
- try except finally;
- 上下文管理器:定义和控制代码块执行前的准备动作及执行后的收尾动作;
-with支持上下文管理器的对象;
读取本地文件
- 文件file是一个可迭代对象;
- f.readlines()需要注意当前文件指针的位置,想要修改文件指针位置,用f.seek();
- 使用python2和python3读取、写入文件需要注意编码格式:
3.1 Pycharm等IDE开发工具指定项目工程和文件的字符编码 或者 在python源文件头部指定的字符编码:- coding:utf-8 -*-:
- 他们的主要作用是告诉python解释器当前python代码文件保存时使用的字符编码格式。
3.2 而程序读取文件时,使用的字符编码是需要程序员手动指定的,python2和python3下又稍微有区别: - 对python2,open函数定义如下:open(name[, mode[, buffering]]);python2下对文件的read、write,操作的都是字节,所以如果想要得到正确的字符串,需要对read()回来的
字节进行decode(),对write()前的字节进行encode(); - 对python3,open函数定义如下:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None;这里可以看出python3下
解释器可以自动完成写入时的encode和读取时的decode,前提是我们需要在打开文件时指定字符编码:encoding='utf-8'。 - 无论是python2还是python3,如果读取文件时不指定字符编码,那么解释器将指定平台默认的字符编码。
爬取网络数据
1. 抓取:
1.1. 使用urllib.request;
1.2. 使用Requests第三方库;(个人爬虫项目)
- 使用requests.get(url,headers=headers)时,如果status_code返回418,那么基本是没有指定请求头,即:
1.2.1 正确实例:
url = 'https://movie.douban.com/subject/20645098/comments/'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;1=0.9,*/*;1=0.8',
'Host':'movie.douban.com',
'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}
r = requests.get(url, headers = headers)
1.2.2 re = requests.get()返回的是一个对象re,它包括request的请求内容,也包括reponse的抓取数据;
1.2.2.1 re.text——推测抓取文本的编码格式并进行解码;
1.2.2.2 re.content——如果抓取的是一个二进制文本,则数据可以使用content获取;
1.2.2.3 re.json()——按json格式解析抓取的数据;
1.3. Scrapy框架(大型爬虫项目)
2. 解析
2.1 使用BeautifulSoup库从HTML或XML文件中提取数据;(通常获取整块数据),例:from bs4 import BeautifulSoup
2.2 使用re正则表达式来匹配获取块数据中的指定格式数据;
例:
import re
pattern_s = re.compile('<span class="short">(.*?)</span>')
p = re.findall(pattern_s, r.text)
函数式编程
- 主要有3个基本函数和一个算子构成:
- 3个基本函数:map(),reduce(), filter();
- map(function, iterate) : 遍历可迭代对象中的元素,将他们传给function,然后将返回值组成列表返回
- 算子:lambda
可变可迭代对象修改问题
- list深拷贝和浅拷贝:
- 浅拷贝list,例:
x = [1,[1,2],3,4]
y = x[:]或 y = x.copy()
y[0],y[1][0] = 2,2
结果:
x = [1,[2,2],3,4]
-. 深拷贝list: y = copy.deepcopy(x),则上面代码最终x = [1,[1,2],3,4]
-. 非拷贝,直接复制:y = x,相当于x的引用
python的开源系统Scipy
- Scipy六大核心库:Numpy, Pandas,MatPlotlib等;
Numpy库简介
- ndarry的ufunc函数:即一种能对数组中的每个元素进行操作的函数。Numpy内置的许多ufunc函数都是在C语言级别实现的,计算速度非常快;
例如:add,sin,...
pandas库简介
- 变长字典Series:
- 类似一维字典,由索引和value构成;
- 可以自定义索引: a = pandas.Series([3,5,7], index=[a,b,c])
- Series的数据对齐: 通过index来获取对应的value:
data = {a:'a',b:'b',c:'c'}
tindex = [a,c,d]
a = pandas.Series(data, index = tindex)
a = {
a:'a',
c:'c',
d:NAN #NAN —— Not A Number
}
- DataFrame基本特征:
- 一个表格型的数据结构;
- 含有一组有序的列(类似于index);
- 大致可以看成一组共享index的Series集合;
data = numpy.array([('wangdachun', 4000),('LiNing', 5000),('zhaoritian',6000)])
frame = pandas.DataFrame(data, index=range(1,4),columns=['name','pay'])
网友评论