(十六)python延申知识点

一、集合的概念与使用

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤傲倾城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值