學習python的第二天

主要內(nèi)容

今天主要是學習如何制作詞云,如何提取文檔中出場最多的人物名

python如何讀取文件

下面是具體實例展示

#讀取文件 內(nèi)置函數(shù)open
#file='文件的路徑'使用相對路徑即可,
#.當前文件夾   /代表文件夾之間的分割
#mode='r' 只讀的方式
f = open(file='./threekingdom.txt',mode='r',encoding='UTF-8')
words = f.read()
print(words)
#打印文本
#關(guān)閉流
f.close()
print(len(words))
#計算文檔字節(jié)長度

import的使用

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

如何繪制詞云

首先要學會安裝第三方庫文件
可以在“terminal”下直接安裝,或者進入該網(wǎng)站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:
    #與之前方法相比不需要關(guān)閉流
    words = f.read()
    # print(words)
#2.對小說字符串進行分詞
words_list = jieba.lcut(words)
print(words_list)
#把返回的分詞列表轉(zhuǎn)化成字符串
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 函數(shù)名():
#     函數(shù)體
def sort_by_age(dict_info):
    return dict_info['age']
#
# 按照年齡進行倒序排序
# key是接受一個函數(shù)名  用于指定 按照什么進行排序
#
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] = 取出字典中原來計數(shù) + 1
            # counts[word] = count[word] + 1
            counts[word] = counts.get(word,0) + 1
    # print(counts)
    counts['孔明'] = counts['孔明曰'] + counts['孔明']
    counts['玄德'] = counts['玄德曰'] + counts['玄德'] + counts['劉備']
    counts['關(guān)公'] = counts['關(guān)公'] + counts['云長']
    #刪除靠前與人名無關(guān)的詞匯
    for word in excluss:
        del counts[word]
    #將counts轉(zhuǎn)換為列表
    items = list(counts.items())
    print(items)

    def sort_by_count(x):
        return x [1]
    items.sort(key=sort_by_count,reverse=True)
    # print(items)
    #顯示計數(shù)前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 函數(shù)名():
    print('haha')
    pass #站位 不讀取里面的內(nèi)容

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)

函數(shù)和方法

函數(shù)與方法:沒區(qū)別
函數(shù)是針對于面向過程
方法是面向?qū)ο?/p>

匿名函數(shù)

格式:lambda 參數(shù)1,參數(shù)2,.....:表達式
缺點是不能反復調(diào)用
具體實例:

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

sorted和.sort的區(qū)別

  1. .sort()是列表特有的方法,sorted()適用于任何可迭代對象
  2. .sort()是在原來的列表上進行修改,sorted()是返回一個新的列表
  3. 調(diào)用形式不一樣

列表推導式

#生成一個[0,1,2,···,9]
li = []
for i in range(20):
   li.append(i)
print(li)
  • 篩選出所有的偶數(shù)
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)
  • 篩選所有大于零的數(shù)
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進行反轉(zhuǎn)  gfedcba
print(name[::-1])
#獲取 f d b
print(name[-2::-2])

字符串輸出

i = 3
grade = '十五'
print('這是我們上課的第{}天,我的修煉等級為{}級別'.format(i))

對分析的數(shù)據(jù)進行可視化展示

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()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容