Python文件操作
讀取文件
內(nèi)置函數(shù)open file='文件的路徑"相對(duì)路徑即可狐树。 “.”是代表當(dāng)前文件下 沟启; “/”代表文件夾之間的分隔; mode='r' 只讀方式段审; encoding='UTF-8' 全蝶,編碼方式中文都是UTF-8。英文編碼方式使用GBK
打開文件 例如
f = open(file='./threekingdom.txt', mode='r', encoding='UTF-8')
words = f.read()
print(words)
- 關(guān)閉流
f.close()
print(len(words))
print(type(words))
Python排序
打亂函數(shù)
代碼案例
# 創(chuàng)建一個(gè)列表[1.2.3....9]
li = []
for i in range(10):
li.append(i)
print(li)
from random import shuffle # 調(diào)用打亂函數(shù)
shuffle(li) # 打亂函數(shù)
print('打亂后', li)
排序 first
# 創(chuàng)建一個(gè)列表[1.2.3....9]
li = []
for i in range(10):
li.append(i)
print(li)
from random import shuffle # 調(diào)用打亂函數(shù)
shuffle(li) # 打亂函數(shù)
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)
函數(shù)def
格式如下:
def函數(shù)名():
函數(shù)體
def sort_by_age(x):
return x['age']
# 按照年齡排序
#key 是接受一個(gè)函數(shù)名 用于指定按照什么順序排列
stu_info.sort(key=sort_by_age) # 調(diào)用函數(shù)寺枉,排列默認(rèn)正序排列
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)
外引
# 交換兩個(gè)變量
a = 10
b = 100
print('a=', a,'b=', b)
a, b = b, a
print('a=', a,'b=', b)
#可以一次聲明多個(gè)不同類型變量
c, d, e = 100, [98, 56], 'asd'
print(c)
print(d)
print(e)
詞云繪制
在這里先介紹引入第三方庫(kù)函數(shù)抑淫,語法是
from 模塊名字 import name1,name2
例如
from random import randint
等效于
import random
random.randint
當(dāng)我們引用第三方庫(kù)函數(shù)時(shí)通常先下載安裝第三方庫(kù)姥闪,我們通常使用Terminal通過pip install + 庫(kù)名下載 丈冬, 但是有時(shí)候會(huì)出現(xiàn)一些不能下載的問題,這種情況很常見甘畅,我們?cè)趺慈ソ鉀Q呢?這里介紹有三種方法往弓。
1.GUI界面安裝第三方庫(kù)可以在PyCharm工具欄小板手處安裝疏唾,具體過程:小扳手--project+文件夾名--project inter prefer--右上角“+”--搜索到將其選擇--Install Package,下載安裝即可
2.本地安裝方法
在https://www.lfd.uci.edu/~gohlke/pythonlibs/里找到你想要安裝的GUI庫(kù)文件函似,可以下載win32.whl的槐脏,這個(gè)跟你電腦多少位操作系統(tǒng)無關(guān),下載后copy到當(dāng)前工程文件夾下撇寞,點(diǎn)擊Terminal后輸入pip install + 下載的文件名(輸入幾個(gè)關(guān)鍵字按Tab即可有提示)顿天。
3.在所用的JetBrains PyCharm 2019.1.1 x64軟件的路徑下所存的py格式的文件夾出單擊文件夾,按住shift再按鼠標(biāo)右鍵蔑担,選擇“在此處進(jìn)入Powersshell窗口”牌废,在窗口中同樣可以進(jìn)行下載。
而詞云繪制需先下載wordcloud第三方庫(kù)啤握。
首先繪制一個(gè)簡(jiǎn)單的英文詞云鸟缕,代碼如下
from wordcloud import WordCloud
#如何繪制一個(gè)簡(jiǎn)單的詞云
#1.英文詞云
txt = 'i like python , python is the best project language in the word'
wc = WordCloud().generate(txt)
wc.to_file('python.png')
循循漸進(jìn) 1. 先繪制三國(guó)小說詞云
案例代碼如下
import jieba #引入jieba庫(kù) ,第一天學(xué)習(xí)到的知識(shí)排抬,可以去前一篇看
from wordcloud import WordCloud #引入wordcloud庫(kù)
import imageio
mask = imageio.imread('china.jpg') #將背景設(shè)為中國(guó)地圖形狀懂从,圖片需讀者自備,否則會(huì)出現(xiàn)錯(cuò)誤
#1.讀取三國(guó)這本小說
#使用with 上下文管理器進(jìn)行本地文件讀取
with open('./threekingdom.txt', 'r', encoding='utf-8') as f: #這種方法省略了關(guān)閉流蹲蒲,第二種讀取文件方式 番甩,比較常用 ,優(yōu)點(diǎn)較明顯
words = f.read()
print(words)
#2.對(duì)小說字符串進(jìn)行分詞
word_list = jieba.lcut(words) #第一天學(xué)習(xí)內(nèi)容
print(word_list)
# 把返回的分析列表轉(zhuǎn)換成字符串
word_text = ' '.join(word_list) #第一天學(xué)習(xí)內(nèi)容
print(word_text)
#3.使用wordcloud進(jìn)行繪制
WordCloud(
background_color='grey', #背景顏色
width=800,
height=600,
font_path='MSYH.TTC', #字體届搁,要用的字體要導(dǎo)入當(dāng)前文件夾缘薛,需自備
mask=mask, #背景形狀
).generate(word_text).to_file('三國(guó)詞云.png') #png圖片格式
- 升級(jí)窍育,三國(guó)人物出場(chǎng)次數(shù)Top10繪制詞云
案例代碼
import jieba #引入jieba庫(kù) ,第一天學(xué)習(xí)到的知識(shí)掩宜,可以去前一篇看
from wordcloud import WordCloud
import imageio
mask = imageio.imread('china.jpg')
# 1.讀取三國(guó)這本小說
with open('./三國(guó).txt', 'r', encoding='utf-8') as f: # 這種方法省略了關(guān)閉流
words = f.read()
word_list = jieba.lcut(words)
# 定義一個(gè)集合蔫骂,為了將與人物無關(guān)的詞剔除
excludes = {"將軍", "卻說", "丞相", "二人", "不可", "荊州", "不能", "如此", "商議",
"如何", "主公", "軍士", "軍馬", "左右", "次日", "引兵", "大喜", "天下",
"東吳", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人馬", "不知",
'孔明曰','玄德曰','劉備', '云長(zhǎng)'}
# print(word_list)
print(len(word_list))
# 定義一個(gè)字典{'人名':'出現(xiàn)次數(shù)'}
counts = {}
for word in word_list:
if len(word) == 1:
continue
else:
# 往字典里添元素
counts[word] = counts.get(word, 0) + 1 #第一天學(xué)習(xí)到的內(nèi)容
# print(counts)
#將意思相同的人物合并
counts['孔明'] = counts['孔明'] + counts['孔明曰']
counts['劉備'] = counts['劉備'] + counts['玄德曰'] + counts['玄德']
counts['關(guān)羽'] = counts['云長(zhǎng)'] + counts['關(guān)羽']
# 刪除無關(guān)的信息
for word in excludes:
del counts[word]
# 將count轉(zhuǎn)化成列表
items = list(counts.items())
# print(items) #這里用到了sorted()和lambda()倆函數(shù),下面會(huì)講到牺汤,我這里是用之前的排序函數(shù)寫的 辽旋,學(xué)到后面的內(nèi)容后將這里改進(jìn)了 下面這個(gè)是現(xiàn)在知識(shí)解決的,兩種方法使用一個(gè)
#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)
# 顯示 計(jì)數(shù)前10的詞語
role_list = []
for i in range(10):
# 拆包 序列解包
# print(items[i])
role_name, count = items[i]
print(role_name, count)
# _是給讀者看的 表示并沒有使用臨時(shí)變量
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, #將每個(gè)詞語出現(xiàn)兩次關(guān)閉
mask=mask,
).generate(text).to_file('top10.png')
函數(shù)和lambda表達(dá)式
函數(shù)格式
def 函數(shù)名():
內(nèi)容pass #占位
函數(shù)名() #函數(shù)必須得調(diào)用才有效
def 函數(shù)名():
pass #占位
函數(shù)名() #函數(shù)必須得調(diào)用才有效
案例代碼
#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ù)和方法的區(qū)別:沒區(qū)別
函數(shù)是針對(duì)于面向過程
方法是面向?qū)ο?/p>
lambda匿名函數(shù)
格式:lambda 參數(shù)1檐迟,參數(shù)2补胚,。追迟。溶其。:表達(dá)式
避免重名 , 不能反復(fù)調(diào)用
案例代碼
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()函數(shù)排序
print(stu_info1)
stu_info1 = sorted(stu_info1, key=lambda x: x[1]) # sorted()函數(shù)排序
print(stu_info1)
# .sort()和sorted() 的區(qū)別
# 1. .sort()是列表特有的方法敦间。sorted()是適用于任何可迭代對(duì)象
# 2. .sort()是在原來列表上進(jìn)行修改 sorted()是返回一個(gè)新的列表
# 3.調(diào)用形式不一樣
列表推導(dǎo)式
#生成一個(gè)列表[0.1.2.....9]
li = []
for i in range(10):
li.append(i)
print(li)
# 使用列表推導(dǎo)式
#語法 [表達(dá)式 for 臨時(shí)變量 in 可迭代對(duì)象 條件]
li2 = [i for i in range(10)]
print(li2)
li = []
for i in range(20):
li.append(i)
print(li)
# 篩選出所有的偶數(shù) 得先遍歷
new_li = []
for i in li:
if i % 2 == 1:
new_li.append(i)
print(new_li)
# 使用列表推導(dǎo)式
li3 = [i for i in range(20) if i%2==0]
print(li3)
# 生成正負(fù)隨機(jī)的列表
from random import randint
li5 = []
for _ in range(10):
li5.append(randint(-20, 20))
print(li5)
#用列表推導(dǎo)式表示
li5 = [randint(-20, 20) for _ in range(10)]
print(li5)
#刪選所有的大于0的
li6 = [i for i in li5 if i > 0]
print(li6)
用三個(gè)案例來解讀列表推導(dǎo)式 瓶逃,可在其中摸索關(guān)系。
Python的可視化表示
切片
python中特色廓块, 列表和字符串可切片厢绝,左閉右開
案例代碼
name = 'abcdefg'
#左閉右開
print(name[0:3])
print(name[0:8:2])
print(name[::2])# 起始值中止值可以省略
print(name[:])
print(name[::-1]) # name進(jìn)行反轉(zhuǎn) gfedcba
print(name[-2::-2])# abcdefg 往前查是g是從-1往前查 往后查a是從0開始查
字符串輸出
i = 2
grade = '十五'
print('這是我們上課的第{}天,我是第{}名'.format(i, grade))
對(duì)分析的數(shù)據(jù)進(jìn)行可視化表示
# 導(dǎo)入庫(kù)
# as 起別名
# 名字來源于MATLAB
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei'] #這句和下句是導(dǎo)入字體 按格式寫就行
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()
內(nèi)容很豐富,很簡(jiǎn)單带猴,很基礎(chǔ)昔汉。但是對(duì)于新人來說,也是種巨大的挑戰(zhàn)拴清,想要學(xué)好一門語言并不是一種容易的事靶病。失敗并不可怕,可怕的是我本可以口予。加油娄周!