Python学习第二天
2019-07-23 本文已影响0人
乡村蝙蝠侠
GUI界面安装第三方库
- 快捷键ctrl+alt+s
- 点击project
- 点击右上角加号进行安装
如何获取文件的路径
- 右键想要获取路径的文件,点击Copy relative path,即复制成功
读取txt文件
当前文件夹 /代表文件夹之间的分割
mode='r' 代表只读的方式
案例:
f=open(file='./threekingdom.txt',mode='r',encoding='UTF-8')
words=f.read()
print(words)
print(type(words))
#关闭流
f.close()
print(len(words))
image.png
即输出txt内容以及类型和字节。
import语句
在开始使用一个模块中的函数之前,必须用import语句导入该模块。
结构格式:
from 模块名 import name1,name2
例如:
from random import randint
等效于
import random
random.randint
如何绘制一个简单的词云
案例:
from wordcloud import WordCloud
#如何绘制一个简单的词云
#1、英文词云
#类
txt='i like python,python is the best project language in the world'
wc=WordCloud().generate(txt)
wc.to_file('python.png')
输出结果:
python.png
绘制三国小说词云
案例:
#@file:绘制三国小说词云.py
#@Software: PyCharm
import jieba
from wordcloud import WordCloud
import imageio
#1.读取三国这本小说
#使用with 上下文管理器进行本地文件读取 不用手动关闭流
mask = imageio.imread('china.jpg')
with open('threekingdom.txt','r',encoding='UTF-8')as f:
words=f.read()
# print(words)
#2.对小说字符串进行分词
words_list=jieba.lcut(words)
print(words_list)
#把返回的分词流标转换成字符串
words_text=' '.join(words_list)
print(words_text)
#3.使用WordCloud进行绘制
WordCloud(
background_color='white',
width=800,
height=600,
font_path='msyh.ttc',
mask=mask
).generate(words_text).to_file('三国词云.png')
输出结果:
三国词云.png
常用的排序方法
案例:
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)
输出结果:
image.png
字典排序
首先创建一个字典,如下:
案例:
stu_info = [
{'name':'zhangsan', 'age':33},
{'name':'lisi', 'age':8},
{'name':'wangwu', 'age':66},
{'name':'tianqi', 'age':17},
]
print(stu_info)
- 按年龄倒序输出
案例:
stu_info = [
{'name':'zhangsan', 'age':33},
{'name':'lisi', 'age':8},
{'name':'wangwu', 'age':66},
{'name':'tianqi', 'age':17},
]
print(stu_info)
# def 函数名():
# 函数体
def sort_by_age(dict_info):
return dict_info['age']
#
# 按照年龄进行倒序排序
# key是接受一个函数名 用于指定 按照什么进行排序
#
stu_info.sort(key=sort_by_age,reverse=True)
print('排序后', stu_info)
输出结果:
image.png
*按姓名倒序输出
案例:
stu_info = [
{'name':'zhangsan', 'age':33},
{'name':'lisi', 'age':8},
{'name':'wangwu', 'age':66},
{'name':'tianqi', 'age':17},
]
print(stu_info)
def sort_by_name(dict_info):
return dict_info['name']
stu_info.sort(key=sort_by_name,reverse=True)
print('按照名字排序后', stu_info)
输出结果:
image.png
元组按序输出
stu_info = [
('zhangsan', 89),
('lisi', 7),
('wangwu ', 222),
('zhaoliu', 44)
]
print(stu_info)
def sort_by_tuple(x):
return x[1]
stu_info.sort(key=sort_by_tuple)
print('排序后', stu_info)
输出结果:
image.png
交换两个变量
在C语言中交换两个变量需要引入中间变量进行交换,在python中要简单的多。
在C语言中交换两个变量如下所示:
int a=10
int b=100
temp=a
a=b
b=temp
python中交换两个变量代码如下:
案例:
a=10
b=100
a,b=b,a
print('a=',a)
print('b=',b)
输出结果:
image.png
可以看出,C语言中三行代码在Python中只需要一行代码就可以解决。
一次声明多个变量
案例:
c,d,e=100,[90,33],'hehe'
print(c)
print(d)
print(e)
输出结果:
image.png
函数和lambda表达式
案例:
def 函数名():
print(('haha'))
pass#站位
#调用
函数名()
输出结果:
image.png
1~num之间的累加和
案例:
def caculate_num(num):
result=0
for i in range(num+1):
result +=i
return result
pass
sum_num=caculate_num(100)
print(sum_num)
输出结果:
image.png
函数和方法:没区别
函数是针对于面向过程
方法是面向对象
匿名函数
lambda 参数1 ,参数2。。。。。。。:表达式
- 案例1:
pingfang=lambda n:n*n
add=lambda x,y:x+y
print(add(3,4))
print(pingfang(7))
输出结果:
image.png
- 案例2:
stu_info = [
{'name':'zhangsan', 'age':33},
{'name':'lisi', 'age':8},
{'name':'wangwu', 'age':66},
{'name':'tianqi', 'age':17},
]
stu_info.sort(key=lambda x:x['age'])
print('排序后',stu_info)
输出结果:
image.png
- 案例3:
stu_info = [
('zhangsan', 89),
('lisi', 7),
('wangwu ', 222),
('zhaoliu', 44)
]
stu_info.sort(key=lambda x:x[1])
print('排序后',stu_info)
#或者(输出结果相同)
#stu_info=sorted(stu_info,key=lambda x:x[1])
#print(stu_info)
输出结果:
image.png
.sort()和sorted 的区别
- .sort()是列表特有的方法,sorted适用于任何可迭代对象
- .sort()是在原来的列表上进行修改,sorted()是返回一个新的列表
- 调用形式不一样
列表推导式
- 案例1(0到9):
# 生成一个[0,1,......9]
li=[]
for i in range (20):
li.append(i)
print(li)
输出结果:
image.png
- 案例2(偶数):
li=[]
for i in range (20):
li.append(i)
print(li)
#筛选出所有的偶数
new_li=[]
for i in li:
if i%2==0:
new_li.append(i)
print(new_li)
#或者(输出结果相同)
#li3=[i for i in range(20) if i%2==0]
#print(li3)
输出结果:
image.png
- 案例3(正负随机数):
li=[]
for i in range (20):
li.append(i)
print(li)
#生成正负随机的列表
from random import randint
li5=[]
for _ in range(10):
li5.append(randint(-20,20))
print(li5)
输出结果:
image.png
- 案例4(列表推导式):
li2=[i for i in range(10)]
print(li2)
输出结果:
image.png
- 案例5(使用列表推导式完成案例3):
使用列表推导式
语法结构:
[表达式for 临时变量 in 可迭代变量 筛选条件]
# 使用列表推导式生成li5
from random import randint
li5=[randint(-20,20) for _ in range(10)]
print(li5)
输出结果:
image.png
- 案例6(筛选案例4中大于零的数):
li=[]
for i in range (20):
li.append(i)
print(li)
#生成正负随机的列表
# 使用列表推导式生成li5
from random import randint
li5=[randint(-20,20) for _ in range(10)]
print(li5)
#筛选所有大于零的
res_list=[x for x in li5 if x>0]
print(res_list)
输出结果:
image.png
切片(Python中的特色 slice)
案例:
name='abcdefg'
#左闭右开
#获取abc
print(name[0:4])
#a c e f
print(name[0:8:2])
print(name[::2])
#name
print(name[::])
#name进行反转 gfdecba
print(name[::-1])
#g e c a
print(name[::-2])
#f d b
print(name[-2::-2])
# 起始值终止值 可以省略
输出结果:
image.png
字符串输出
案例:
i=2
grade='十五'
print('这是我们上课的第{}天,我的修炼等级达到了{}级别'.format(i,grade))
输出结果:
image.png
对分析的数据进行可视化展示
bar pie scatter plot
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)
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()
输出结果:
image.png image.png
将三国人物出场TOP10输出条形图
import jieba
from wordcloud import WordCloud
#1、读取文件
with open('threekingdom.txt','r',encoding='UTF-8')as f:
words=f.read()
word_list=jieba.lcut(words)
excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",
"如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",
"东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",
'孔明曰', '玄德曰', '刘备', '云长'}
# print(word_list)
# print(len(word_list))
#定义一个字典{‘夏侯渊’:788,‘不来’:56}
counts={}
for word in word_list:
#删除靠前与人名无关的词汇
if len(word)==1:
continue
else:
#往字典里添加元素
# count[word]=取出字典中原来的计数+1
# count[word]=count[word]+1
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]
items=list(counts.items())
def sort_by_count(x):
return x[1]
items.sort(key=sort_by_count,reverse=True)
# print(items)
# 显示计数前20词语
role_list=[]
for i in range(10):
#拆包 序列解包
role_name,count=items[i]
print(role_name,count)
#给读代码的人看的,_代表并没有使用临时变量
# for _ in range(1):
# 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
# ).generate((text)).to_file('top10.png')
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# print(items)
print(items[0:10:1])
dict1=dict(items[0:10:1])
print(dict1)
x = ["{}".format(i) for i in dict1.keys()]
print(x)
y = [i for i in dict1.values()]
print(y)
# 绘制 条形图
plt.bar(x, y)
plt.show()
输出结果:
image.png