文章目录
一、集合的概念与使用
1.集合:
python中的内置结构,是一个无序的集,用来保存不重复的元素。存储基本的且不可变的数据类型。例如:整型、浮点型、字符串、元组。(列表、字典、集合均为可变数据类型)
{'Joan', 'Bill', 'Mark', 'Tom'}
2.集合的创建
- 如果创建空集合需要使用set,用大括号会默认创建为字典。
a = set()
b = {1,2,'abc'}
print(a)
print(b)
c = {1,2,1,1,2}
print(c)
- 集合不会包括重复的元素,默认会将重复元素进行归一化。
- 将字符串、元组、列表、字典转换为集合
a = 'abcde' #a为字符串
test = set(a)
print(test)
#输出结果:{'c','e','d','a','b'}
b = [1,2,3] #b为列表
test = set(b)
print(test)
#输出结果:{1,2,3}
c = (1,2,'abc') #c为元组
test = set(c)
print(test)
#输出结果:{1,2,'abc'}
d = {'a':1, 'b':2, 'c':3} #d为字典
test = set(d)
print(test)
#输出结果:{'a','b','c'}
- 集合是无序的,不能用索引的方式访问,但是可以使用遍历来访问。
test = {1,2,'abc',567,8}
for item in test: #使用变量item遍历集合test
print(item) #打印集合中的每个元素
- 集合的添加与移除
nums = {1,2,3}
nums.add(6) #添加数字6
nums.removw(1) #移除数字1
print(nums)
#输出结果:{2,3,6}
- 集合运算
- 交集:取两个集合的公共元素 &(符号)/intersection(函数)
- 并集:取两集合的全部元素 I/union
- 差集:取一个集合中另一个集合没有的元素 -/difference
a = {1,2,3,4}
b = {3,4,5,6}
print(a&b)
#输出结果:{3,4}
print(a.intersection(b))
#输出结果:{3,4}
print(b&a)
#输出结果:{3,4}
print(b.intersection(a))
#输出结果:{3,4}
print(a|b)
#输出结果:{1,2,3,4,5,6}
print(a.union(b))
#输出结果:{1,2,3,4,5,6}
print(b|a)
#输出结果:{1,2,3,4,5,6}
print(b.union(a))
#输出结果:{1,2,3,4,5,6}
print(a-b)
#输出结果:{1,2}
print(a.difference(b))
#输出结果:{1,2}
print(b-a)
#输出结果:{5,6}
print(b.difference(a))
#输出结果:{5,6}
二、for循环的概念与用法
1.基本语法
for 变量 in 集合:
代码1
代码2
...
代码n
2.代码示例
for i in range(0,10): #i为循环变量,循环范围是0至9
print("i=%d" %(i)) #在屏幕上打印i的值
#输出结果:
#i=0
#i=1
#i=2
#i=3
#i=4
#i=5
#i=6
#i=7
#i=8
#i=9
三、字典的概念和用法
1.映射
元素之间的“相互对应”关系
2.字典
表示映射关系的结构
3.语法
字典名 = {字典内容}
- key–>键
- value–>值
dict = {key1 : value1, key2 : value2,...}
4.(例)创建水果和篮子映射对应字典:
5.创建空字典:
-
name = { } 或 name = dict( )
-
在向字典添加键值对时,语法为:dictname[ key ] = value
- key ---->表示映射的键
- value---->表示元素的值
-
(例)创建水果与对应价格的字典并赋值
-
如果某个key不在字典当中,强行使用字典名中括号key的方式,去对应的值会出现运行错误。----->可以使用关键字in配合if语句,来判断key是否在字典当中。
四、关系运算
布尔类型
- true---->1
- False---->0
- (例)球队三次比赛所得分数
#配合提示信息,输入我们球队和三个对手球队的实力,保存在a,b,c,d四个变量中
a = int(input("输入我们球队的实力:"))
b = int(input("输入对手1队的实力:"))
c = int(input("输入对手2队的实力:"))
d = int(input("输入对手3队的实力:"))
avsb = (a>b) * 3 + (a == b) #计算我们球队与对手1比赛的分数
avsc = (a>c) * 3 + (a == c) #计算我们球队与对手2比赛的分数
avsd = (a>d) * 3 + (a == d) #计算我们球队与对手3比赛的分数
score = avsb + avsc + avsd #将avsb、avsc、avsd三个变量的值累加到score
print("小组赛球队可以得%d分。"%(score)) #打印小组赛结束后球队获得的分数
五、使用python进行目录搜索
1.树形结构
树,是一种非常常见的数据结构,是大于等于1个有限结点组成的具有层次关系的集合。
- 树的节点要满足的三个条件
- 有且只有一个节点没有父节点,即只有树的根没有父节点
- 除根外,其余每一个节点都有且只有一个父节点
- 树中的每一个节点都都构成一个以它为根的树
2.深度优先搜索算法
- 对树的每一个分支,都进行了深度到不能再深入的搜索。
- 每一个节点只访问一次。
3.用python实现将一个目录文件下的所有文件转移至另一个文件的思考流程
- 将目录文件看为根节点,其中目录中所有子目录看作树中的内部节点。这些节点需要继续向下搜索,而需要判断的文件就是树的叶节点。
- 用递归实现目录的搜索
import OS #导入系统库os
import shutil #实现移动文件的功能需要
#path代表待搜索的目录路径,result存储搜索到的文件路径列表
#函数将path目录中的全部子目录和文件找到保存至result
def search_dir(path, result):
#使用os中的listdir得到path下的目录和文件,保存到child_files
child_files = os.listdir(path)
for child in child_ files:
#通过join函数拼接子目录或文件的路径,存储至child
child = os.path.join(path, child)
#将child保存至result
result.append(child)
if os.path.isdir(child): #如果child是一个子目录
search_ dir(child, result) #调用search_ dir继续递归搜索child
- 在主程序中开发输入和移动文件的代码
#输入搜索目录和doc文件保存的目录
input_dir = input("输入待搜索的目录:")
output_dir = input("输入保存文件的目录:")
#设置保存子目录与文件路径的列表files
files = list()
#将input dir中的全部子目录和文件路径找到并保存到files
search_dir(input_dir, files)
for file in files: #遍历files
print("find %s"%(file)) #打印搜索到的路径
#如果该路径是一个docx文件
if os.path.isfile(file) and file.endswith( ".docx"):
print("move %s"%(file)) #打印提示信息
shutil.move(file, output_ dir) #将文件移动到output_ dir
六、python搭建数据爬虫----->数据获取
网页数据爬虫实现了互联网网页自动化下载和自动化解析,通过爬虫我们可以下载和分析网页。只要是能通过浏览器访问的网址,都可以通过爬虫来获取和分析。
1.爬虫
通过一个原始网址寻找出更多的网址链接。
2.spider.py
(1)网页下载
模拟浏览器向网站服务器发送http请求,如果服务器正常响应,再响应回复中就包含了网页的HTML代码。
- 发送的http请求有两个参数,网址url和http-header
- http-header是http消息头,包括了如用户代理、浏览器版本等关键信息。
- 网页下载使用u-r-l-lib库(其中python3内置了此库)
- 代码实现
#将豆瓣电影top250的第一页下载
import urllib.request #导入url-lib-request模块
#设置网址
url = "https://movie.douban.com/top250"
#http头信息
header= {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
"AppleWebKit/537.36 (KHTML, like Gecko)"
"Chrome/76.0.3809.87 Safari/537.36 SLBrowser/6.0.1.8131"
}
#构造一-个Request请求对象
req = urllib.request.Request(url = url, headers = header)
#向豆瓣服务器发送请求,获取到回复response
response = urllib.request.urlopen(req)
#读取回复并使用UTF-8编码进行解码
html = response.read().decode("utf-8")
print(html)
(2)链接提取
使用正则表达式
import urllib.request #导入url-lib-request模块
def download_html(urI):
#http头信息
header= {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
"AppleWebKit/537.36 (KHTML, like Gecko) "
"hrome/76.0.3809.87 Safari/537.36 SLBrowser/6.0.1.8131"
}
#构造一个Request请求对象
req = urllib.request.Request(url = url, headers = header)
#向豆瓣服务器发送请求,获取到回复response
response = urllib.request.urlopen(req)
#读取回复并使用UTF-8编码进行解码
html = response.read().decode("utf-8")
return html
#调用函数download_html, 下载豆瓣top250第一页,保存至html
html= download_html("https://movie.douban.com/top250")
import re#导入re正则库
#电影介绍页网址的正则表达式
pattern = 'https://movie.douban.com/subject/[0-9]+/'
#从html中提取全部满足电影介绍页网址pattern的url
urls = re.findall(pattern, html)
urls = set(urls)#通过set集合去重
#打印出提取出的网址数量和具体的网址
print("urls count = %d"%(len(urls)))
for url in urls:
print(ur)
(3) 数据存储
(4)完整代码展示
import urllib.request #导入url-lib-request模块
import re#导入re正则库
def download_html(url):
#http头信息
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
"AppleWebKit/537.36 (KHTML, like Gecko)"
"Chrome/76.0.3809.87 Safari/537.36 SLBrowser/6.0.1.8131"
}
#构造一-个Request请求对象
req = urllib.request.Request(url = url, headers = header)
#向豆瓣服务器发送请求,获取到回复response
response = urllib.request.urlopen(req)
#读取回复并使用UTF-8编码进行解码
html = response.read().decode("utf-8")
return html
#电影介绍页网址提取的功能封装至函数extract_url中,
#函数输入html,返回html中提取的url链接
def extract_ur(html):
pattern = 'https://movie.douban.com/subject/[0-9]+/'
urls = re.findall(pattern, html)
return set(urls)
#以读取方式打开豆瓣电影列表文件
file = open('douban.txt,'r')
#然后以写模式打开movie.txt,用来存储提取出的电影介绍页网址
output = open('movie.txt','w')
#将douban中的网址按行读入
lines = file.readlines()
for url in lines:
#遍历每一行url,通过strip函数去掉收尾空字符
url = url.strip()
print(ur) #打印url作为调试信息
#调用download_html获取url对应的html代码
html = download_html(url)
#调用extract_url提取htmT中的电影介绍页链接网址
urls = extract_url(html)
for url in urls: #遍历url集合
output.write(url + '\n') #将每个url都写入movie文件
#最后关闭douban和movie两个文件
file.close()
output.close()