学习python的第二天

主要内容

今天主要是学习如何制作词云,如何提取文档中出场最多的人物名

python如何读取文件

下面是具体实例展示

#读取文件 内置函数open
#file='文件的路径'使用相对路径即可,
#.当前文件夹   /代表文件夹之间的分割
#mode='r' 只读的方式
f = open(file='./threekingdom.txt',mode='r',encoding='UTF-8')
words = f.read()
print(words)
#打印文本
#关闭流
f.close()
print(len(words))
#计算文档字节长度

import的使用

#from 模块名字 import name1,name2...
from random import  randint
#等效于
import random
random randint
# import turtle
# from turtle import done

如何绘制词云

首先要学会安装第三方库文件
可以在“terminal”下直接安装,或者进入该网站https://www.lfd.uci.edu/~gohlke/pythonlibs/
选择wordcloud文件下载到本地进行安装

这里需要提醒的是:python中大小写敏感,英文大小写不同起到不同的作用
下面进行词云绘制的具体实例展示:

#词云绘制
from wordcloud import WordCloud
#如何绘制简单词云
#举例英文词云
txt = 'I like python , python is the best project language in the world'
wc = WordCloud().generate(txt)#类
wc.to_file('python.png')

三国小说词云绘制

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')

python的排序

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':'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)
  • 按照名字倒序排列
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)

python交换和声明变量

具体实例:

#交换两个变量
a = 100
b = 10
a,b = b,a
print('a=',a)
print('b=',b)
 #一次声明多个变量
c,d,e =  100,[90,33],'hehe'
print(c)
print(d)
print()

三国出场前十人物名字词云绘制

#1.读取文件
import  jieba
from wordcloud import WordCloud

with open('threekingdom.txt','r',encoding='UTF-8') as f:
    words = f.read()
    print(words)
    word_list = jieba.lcut(words)
    excluss = {'将军','却说','丞相','二人','孔明曰','刘备','玄德曰','云长'}
    #print(len(word_list))
    #定义一个字典{'夏侯渊':788,'不来':55}
    counts = {}
    for word in word_list:
        if len(word) ==1:
            continue
        else:
            #往字典里添加元素
            # counts[word] = 取出字典中原来计数 + 1
            # counts[word] = count[word] + 1
            counts[word] = counts.get(word,0) + 1
    # print(counts)
    counts['孔明'] = counts['孔明曰'] + counts['孔明']
    counts['玄德'] = counts['玄德曰'] + counts['玄德'] + counts['刘备']
    counts['关公'] = counts['关公'] + counts['云长']
    #删除靠前与人名无关的词汇
    for word in excluss:
        del counts[word]
    #将counts转换为列表
    items = list(counts.items())
    print(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(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
    ).generate(text).to_file('三国人物.png')

pass的站位

def 函数名():
    print('haha')
    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 参数1,参数2,.....:表达式
缺点是不能反复调用
具体实例:

#做平方和加和
pf = lambda n:n*n
add =lambda x,y:x+y
print(pf(7))
print(add(3,4))

sorted和.sort的区别

  1. .sort()是列表特有的方法,sorted()适用于任何可迭代对象
  2. .sort()是在原来的列表上进行修改,sorted()是返回一个新的列表
  3. 调用形式不一样

列表推导式

#生成一个[0,1,2,···,9]
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)
  • 生成正负随机列表
from random import randint
li5 = []
for _ in range(10):
    li5.append(randint(-20,20))
print(li5)
  • 使用列表推导式生成Li5
li5 = [randint(-20,20) for _ in range(10)]
print(li5)
  • 筛选所有大于零的数
res_list = [x for x in li5 if x > 0]
print(res_list)
  • 语法
    [表达式for 临时变量 in可迭代对象 筛选条件]
li2 = [i for i in range(10)]
print(li2)

切片 python中的特色

具体案例如下:

name = 'abcdefg'
print(name[0:3])#左闭右开 获取abc
#获取a c e g
print(name[0:8:2])#起始值终止值可以省略
print(name[::2])
#name进行反转  gfedcba
print(name[::-1])
#获取 f d b
print(name[-2::-2])

字符串输出

i = 3
grade = '十五'
print('这是我们上课的第{}天,我的修炼等级为{}级别'.format(i))

对分析的数据进行可视化展示

from matplotlib import pyplot as plt
#绘制条形图
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()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容