今天是python学习的第二天,接着昨天的学习。
5. Python文件操作
读取文件
内置函数open file='文件的路径"相对路径即可。 “.”是代表当前文件下 ; “/”代表文件夹之间的分隔; mode='r' 只读方式; encoding='UTF-8' ,编码方式中文都是UTF-8。
打开文件 例如
f = open(file='./threekingdom.txt', mode='r', encoding='UTF-8')
words = f.read()
print(words)
#关闭流
f.close()
print(len(words))
print(type(words))
6. Python排序
打乱函数
代码案例
# 创建一个列表[1.2.3....9]
li = []
for i in range(10):
li.append(i)
print(li)
from random import shuffle # 调用打乱函数
shuffle(li) # 打乱函数
print('打乱后', li)
排序 first
# 创建一个列表[1.2.3....9]
li = []
for i in range(10):
li.append(i)
print(li)
from random import shuffle # 调用打乱函数
shuffle(li) # 打乱函数
print('打乱后', li)
li.sort(reverse=True) #排序
print('排序后', li)
列表中含字典的排序
stu_info = [
{'name': 'zhangsan', 'age': 33},
{'name': 'asd', 'age': 56},
{'name': 'cas', 'age':3},
{'name': 'fvd', 'age':104},
]
print(stu_info)
# def函数名():
# 函数体
def sort_by_age(x):
return x['age']
# 按照年龄排序
# key 是接受一个函数名 用于指定按照什么顺序排列
stu_info.sort(key=sort_by_age) # 调用函数,排列默认正序排列
print('排序后', stu_info)
def sort_by_name(x):
return x['name']
stu_info.sort(key=sort_by_name, reverse=True) # reverse=True倒序排列
print('排序后', stu_info)
列表中含元组的排序
代码案例
stu_info = [
('zda', 89),
('asd', 24),
('fdsa', 2),
]
print(stu_info)
def sort_by_tuple(x):
return x[1]
stu_info.sort(key=sort_by_tuple)
print('排序后', stu_info)
外引
# 交换两个变量
a = 10
b = 100
print('a=', a,'b=', b)
a, b = b, a
print('a=', a,'b=', b)
#可以一次声明多个不同类型变量
c, d, e = 100, [98, 56], 'asd'
print(c)
print(d)
print(e)
7. 词云绘制
在这里先介绍引入第三方库函数,语法是
from 模块名字 import name1,name2
例如
from random import randint
等效于
import random
random.randint
当我们引用第三方库函数时通常先下载安装第三方库,我们通常使用Terminal通过pip install + 库名下载 , 但是有时候会出现一些不能下载的问题,这种情况很常见,我们怎么去解决呢?这里介绍有两种方法。
1.GUI界面安装第三方库可以在PyCharm工具栏小板手处安装,具体过程:小扳手--project+文件夹名--project inter prefer--右上角“+”--搜索到将其选择--Install Package,下载安装即可
2.本地安装方法
在https://www.lfd.uci.edu/~gohlke/pythonlibs/里找到你想要安装的GUI库文件,可以下载win32.whl的,这个跟你电脑多少位操作系统无关,下载后copy到当前工程文件夹下,点击Terminal后输入pip install + 下载的文件名(输入几个关键字按Tab即可有提示)。
而词云绘制需先下载wordcloud第三方库。
首先绘制一个简单的英文词云,代码如下
from wordcloud import WordCloud
#如何绘制一个简单的词云
#1.英文词云
txt = 'i like python , python is the best project language in the word'
wc = WordCloud().generate(txt)
wc.to_file('python.png')
循循渐进 1. 先绘制三国小说词云
案例代码如下
import jieba #引入jieba库 ,第一天学习到的知识,可以去前一篇看
from wordcloud import WordCloud #引入wordcloud库
import imageio
mask = imageio.imread('china.jpg') #将背景设为中国地图形状,图片需读者自备,否则会出现错误
#1.读取三国这本小说
#使用with 上下文管理器进行本地文件读取
with open('./threekingdom.txt', 'r', encoding='utf-8') as f: #这种方法省略了关闭流,第二种读取文件方式 ,比较常用 ,优点较明显
words = f.read()
print(words)
#2.对小说字符串进行分词
word_list = jieba.lcut(words) #第一天学习内容
print(word_list)
# 把返回的分析列表转换成字符串
word_text = ' '.join(word_list) #第一天学习内容
print(word_text)
#3.使用wordcloud进行绘制
WordCloud(
background_color='grey', #背景颜色
width=800,
height=600,
font_path='MSYH.TTC', #字体,要用的字体要导入当前文件夹,需自备
mask=mask, #背景形状
).generate(word_text).to_file('三国词云.png') #png图片格式
2. 升级,三国人物出场次数Top10绘制词云
案例代码
import jieba #引入jieba库 ,第一天学习到的知识,可以去前一篇看
from wordcloud import WordCloud
import imageio
mask = imageio.imread('china.jpg')
# 1.读取三国这本小说
with open('./三国.txt', 'r', encoding='utf-8') as f: # 这种方法省略了关闭流
words = f.read()
word_list = jieba.lcut(words)
# 定义一个集合,为了将与人物无关的词剔除
excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",
"如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",
"东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",
'孔明曰','玄德曰','玄德', '云长', '关公'}
# print(word_list)
print(len(word_list))
# 定义一个字典{'人名':'出现次数'}
counts = {}
for word in word_list:
if len(word) == 1:
continue
else:
# 往字典里添元素
counts[word] = counts.get(word, 0) + 1 #第一天学习到的内容
# print(counts)
#将意思相同的人物合并
counts['孔明'] = counts['孔明'] + counts['孔明曰']
counts['刘备'] = counts['刘备'] + counts['玄德曰'] + counts['玄德']
counts['关羽'] = counts['云长'] + counts['关羽'] + counts['关公']
# 删除无关的信息
for word in excludes:
del counts[word]
# 将count转化成列表
items = list(counts.items())
# print(items) #这里用到了sorted()和lambda()俩函数,下面会讲到,我这里是用之前的排序函数写的 ,学到后面的内容后将这里改进了 下面这个是现在知识解决的,两种方法使用一个
#def items_by_list(x):
# return x[1]
#items.sort(key=items_by_list, reverse=True)
#print(items)
items = sorted(items, key=lambda x: x[1], reverse=True) # 倒叙reverse=True
print(items)
# 显示 计数前10的词语
role_list = []
for i in range(10):
# 拆包 序列解包
# print(items[i])
role_name, count = items[i]
print(role_name, count)
# _是给读者看的 表示并没有使用临时变量
for _ in range(count):
role_list.append(role_name)
# print(role_list)
text = ' '.join(role_list)
WordCloud(
background_color='white',
width=800,
height=600,
font_path='MSYH.TTC',
collocations=False, #将每个词语出现两次关闭
mask=mask,
).generate(text).to_file('top10.png')
8. 函数和lambda表达式
函数格式
def 函数名():
内容pass #占位
函数名() #函数必须得调用才有效
def 函数名():
pass #占位
函数名() #函数必须得调用才有效
案例代码
#1~num 之间累加和
def caculate_num(num):
result = 0
for i in range(num+1):
result += i
return result
sum_num = caculate_num(100)
print(sum_num)
函数和方法的区别:没区别
函数是针对于面向过程
方法是面向对象
lambda匿名函数
格式:lambda 参数1,参数2,。。。:表达式
避免重名 , 不能反复调用
案例代码
pingfang = lambda n: n*n
print(pingfang(2))
add = lambda x, y: x+y
print(add(4, 3))
案例代码
stu_info = [
{'name': 'zhangsan', 'age': 33},
{'name': 'lisi', 'age': 8},
{'name': 'wangwu', 'age': 66},
{'name': 'tianqi', 'age': 17},
]
print(stu_info[2])
stu_info.sort(key=lambda x: x['age'])
print('排序后', stu_info)
排序两种方式
stu_info1 = [
('zhangsan', 89),
('lisi', 7),
('wangwu ', 222),
('zhaoliu', 44)
]
stu_info1.sort(key=lambda x: x[1]) #.sort()函数排序
print(stu_info1)
stu_info1 = sorted(stu_info1, key=lambda x: x[1]) # sorted()函数排序
print(stu_info1)
# .sort()和sorted() 的区别
# 1. .sort()是列表特有的方法。sorted()是适用于任何可迭代对象
# 2. .sort()是在原来列表上进行修改 sorted()是返回一个新的列表
# 3.调用形式不一样
9. 列表推导式
#生成一个列表[0.1.2.....9]
li = []
for i in range(10):
li.append(i)
print(li)
# 使用列表推导式
#语法 [表达式 for 临时变量 in 可迭代对象 条件]
li2 = [i for i in range(10)]
print(li2)
li = []
for i in range(20):
li.append(i)
print(li)
# 筛选出所有的偶数 得先遍历
new_li = []
for i in li:
if i % 2 == 1:
new_li.append(i)
print(new_li)
# 使用列表推导式
li3 = [i for i in range(20) if i%2==0]
print(li3)
# 生成正负随机的列表
from random import randint
li5 = []
for _ in range(10):
li5.append(randint(-20, 20))
print(li5)
#用列表推导式表示
li5 = [randint(-20, 20) for _ in range(10)]
print(li5)
#删选所有的大于0的
li6 = [i for i in li5 if i > 0]
print(li6)
用三个案例来解读列表推导式 ,可在其中摸索关系。
10. Python的可视化表示
切片
python中特色, 列表和字符串可切片,左闭右开
案例代码
name = 'abcdefg'
#左闭右开
print(name[0:3])
print(name[0:8:2])
print(name[::2])# 起始值中止值可以省略
print(name[:])
print(name[::-1]) # name进行反转 gfedcba
print(name[-2::-2])# abcdefg 往前查是g是从-1往前查 往后查a是从0开始查
字符串输出
i = 2
grade = '十五'
print('这是我们上课的第{}天,我是第{}名'.format(i, grade))
对分析的数据进行可视化表示--绘制条形图
# 导入库
# as 起别名
# 名字来源于MATLAB
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei'] #这句和下句是导入字体 按格式写就行
plt.rcParams['axes.unicode_minus'] = False
# 绘制条形图
import string
print(string.ascii_uppercase) #大写字母从A-Z
x = ["厂商{}".format(i) for i in string.ascii_uppercase[:5]]
print(x)
from random import randint
y = [randint(200, 300) for _ in range(5)]
print(y)
# 绘制条形图
plt.bar(x, y)
plt.show()
今天的内容就是这些了,自学小伙伴需要努力哦,明天在更新,piupiupiu。