7 文件和數(shù)據(jù)格式化
7.1 文件的使用
7.2 實例11:自動軌跡繪制
7.3 一維數(shù)據(jù)的格式化和處理
7.4 二維數(shù)據(jù)的格式化和處理
7.5 模塊6:wordcloud庫的使用
7.6 實例12:政府工作報告詞云
7.1 文件的使用
文件類型崎弃,文件的打開和關(guān)閉绞铃,文件內(nèi)容的讀取衡怀,數(shù)據(jù)的文件寫入;
7.1.1 文件類型
- 文件是數(shù)據(jù)的抽象和集合:存儲在輔助存儲器上的數(shù)據(jù)序列贺嫂;數(shù)據(jù)存儲的一種形式;有文本文件和二進(jìn)制文件;
- 文本文件:由單一特定編碼組成的文件,如UTF-8編碼囤官;存儲著的長字符串;例如:.txt蛤虐、.py等;
- 二進(jìn)制文件:直接由比特0和1組成肝陪,沒有統(tǒng)一字符編碼驳庭;一般存在二進(jìn)制0和1的組織結(jié)構(gòu),即文本格式氯窍;例如:.png饲常、.avi文件等;
7.1.2 文件打開與關(guān)閉
步驟:打開-操作-關(guān)閉
-
a = open( , )
:打開文件(文件存儲狀態(tài)->文件的占用狀態(tài))狼讨;a.close()
:關(guān)閉文件(文件的占用狀態(tài)->文件存儲狀態(tài)); - 讀文件:
a.read(size)
贝淤、a.readline(size)
、a.readlines(hint)
政供; - 寫文件:
a.write(s)
播聪、a.writelines(lines)
朽基、a.seek(offset)
;
文件打開:<變量名> = open(<文件名>, <打開模式>)
:1)文件名:文件路徑和名稱离陶,源文件同目錄可省略路徑(python中路徑間隔使用‘/’或者‘\’)稼虎;2)打開模式:文本或者二進(jìn)制,讀或者寫招刨;3)變量名:文件句柄霎俩;
- 打開模式:
文件的打開模式 | 描述 |
---|---|
'r' | 只讀模式,默認(rèn)值沉眶,如果文件不存在打却,返回FileNotFoundError |
'w' | 覆蓋寫模式,文件不存在則創(chuàng)建谎倔,存在則完全覆蓋 |
'x' | 創(chuàng)建寫模式学密,文件不存在則創(chuàng)建,存在則返回FileExistsError |
'a' | 追加寫模式传藏,文件不存在則創(chuàng)建腻暮,存在則在文件最后追加內(nèi)容 |
'b' | 二進(jìn)制文本模式 |
't' | 文本文件模式,默認(rèn)值 |
'+' | 與r/w/x/a一同使用毯侦,在原功能基礎(chǔ)上增加同時讀寫功能 |
7.1.3 文件內(nèi)容的讀取
操作方法 | 描述 | 實例 |
---|---|---|
<f>.read(size=-1) | 讀取全部內(nèi)容哭靖,如果給出參數(shù),讀取前size長度 | s = f.read(2):中國 |
<f>.readline(size=-1) | 讀入一行內(nèi)容侈离,如果給出參數(shù)试幽,讀入該行前size長度 | s = f.readline():中國是一個偉大的國家! |
<f>.readlines(hint=-1) | 讀入文件所有行卦碾,以每行為元素形成列表铺坞,如果給出參數(shù),讀入前hint行 | s = f.readlines():['中國是一個偉大的國家洲胖!'] |
文件的全文本操作:
- 遍歷全文本:法一(一次性讀入不適用大文本)
``
fname = input("請輸入要打開的文件名稱:")
fo = open(fname,"r")
txt = fo.read() #一次讀入济榨,一次遍歷
對全文txt進(jìn)行處理
fo.close()
``
- 遍歷全文本:法二(按數(shù)量讀入,逐步處理)
``
fname = input("請輸入要打開的文件名稱:")
fo = open(fname,"r")
txt = fo.read(2) #從文件中讀入2個字節(jié)
while txt != "":對全文txt進(jìn)行處理
txt = fo.read(2)
fo.close()
`` - 逐行遍歷文件:法一(一次讀入绿映,分行處理)
fname = input("請輸入要打開的文件名稱:") fo = open(fname,"r") for line in fo.readlines(): print(line) fo.close()
- 逐行遍歷文件:法二(分行讀入擒滑,逐行處理)
fname = input("請輸入要打開的文件名稱:") fo = open(fname,"r") for line in fo: print(line) fo.close()
7.1.4 數(shù)據(jù)的文件寫入
操作方法 | 描述 | 實例 |
---|---|---|
<f>.write(s) | 向文件寫入一個字符串或字節(jié)流 | f.write("中國是一個偉大的國家!") |
<f>.writelines(lines) | 將一個元素全為字符串的列表寫入文件 | ls = ["中國", "法國","美國"] f.writelines(ls):中國法國美國 |
<f>.seek(offset) | 改變當(dāng)前文件操作指針的位置叉弦,offset含義如下:0-文件開頭丐一;1-當(dāng)前位置;2-文件結(jié)尾 | f.seek(0) #回到文件開頭 |
7.2 自動軌跡繪制
7.2.1 問題分析
需求:根據(jù)腳本來繪制圖形淹冰;不是寫代碼而是寫數(shù)據(jù)繪制軌跡库车;數(shù)據(jù)腳本是自動化最重要的第一步;
7.2.2 實例
基本思路:
- 定義數(shù)據(jù)文件格式(接口)樱拴;
- 編寫程序柠衍,根據(jù)文件接口解析參數(shù)繪制圖形洋满;
- 編制數(shù)據(jù)文件;
#AutoTraceDraw.py
import turtle as t
t.title('自動軌跡繪制')
t.setup(800, 600, 0, 0) #設(shè)置畫布大小
t.pencolor("red") #設(shè)置畫筆顏色
t.pensize(5) #設(shè)置畫筆粗細(xì)
#數(shù)據(jù)讀取
datals = [] #空列表
f = open("E:/python/learn/data.txt") #打開文件
for line in f: #在文件中讀取遍歷每一行
line = line.replace("\n","") #第一行l(wèi)ine將文件最后的換行符轉(zhuǎn)換為空字符串
datals.append(list(map(eval, line.split(",")))) #map函數(shù)為內(nèi)嵌函數(shù):(無需import直接使用)對一個列表或一個集合組合數(shù)據(jù)類型的每一個元素都執(zhí)行一次第一個參數(shù)所對應(yīng)的函數(shù)拧略;
f.close()
#自動繪制
for i in range(len(datals)):
t.pencolor(datals[i][3],datals[i][4],datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.right(datals[i][2])
else:
t.left(datals[i][2])
源數(shù)據(jù) |
---|
300,0,144,1,0,0 |
300,0,144,0,1,0 |
300,0,144,0,0,1 |
300,0,144,1,1,0 |
300,0,108,0,1,1 |
184,0,72,1,0,1 |
184,0,72,0,0,0 |
184,0,72,0,0,0 |
184,0,72,0,0,0 |
184,1,72,1,0,1 |
184,1,72,0,0,0 |
184,1,72,0,0,0 |
184,1,72,0,0,0 |
184,1,72,0,0,0 |
184,1,720,0,0,0 |
7.3 一維數(shù)據(jù)的格式化和處理
數(shù)據(jù)組織的維度芦岂;一維數(shù)據(jù)的表示;一維數(shù)據(jù)的存儲垫蛆;一維數(shù)據(jù)的處理禽最;
7.3.1 數(shù)據(jù)組織的維度
一維數(shù)據(jù):由對等關(guān)系的有序或無序數(shù)據(jù)構(gòu)成,采用線性方式組織:列表袱饭、數(shù)組川无、集合;
二維數(shù)據(jù):由多個一維數(shù)據(jù)構(gòu)成虑乖,是以為數(shù)據(jù)的組合形式懦趋;
多維數(shù)據(jù):由一維或二維數(shù)據(jù)組成;
數(shù)據(jù)的操作周期:存儲(存儲格式)-表示(數(shù)據(jù)類型)-操作(操作方式)疹味;
7.3.2 一維數(shù)據(jù)表示
- 如果數(shù)據(jù)間有序:使用列表類型仅叫;列表類型可以表達(dá)一維有序數(shù)據(jù);for循環(huán)可以遍歷數(shù)據(jù)糙捺,進(jìn)而對每個數(shù)據(jù)進(jìn)行處理诫咱;
- 如果數(shù)據(jù)間無序:使用集合類型;集合類型可以表達(dá)一維無序數(shù)據(jù)洪灯;for循環(huán)可以遍歷數(shù)據(jù)坎缭,進(jìn)而對每個數(shù)據(jù)進(jìn)行處理;
7.3.3 一維數(shù)據(jù)的存儲
- 空格分隔:使用一個或多個空格分隔進(jìn)行存儲签钩,不換行掏呼;缺點是數(shù)據(jù)中不能存在空格;
- 逗號分隔:使用英文半角逗號進(jìn)行分隔铅檩,不換行憎夷;缺點是數(shù)據(jù)不能存在逗號;
- 其他方式:采用特殊符號進(jìn)行分隔柠并;缺點是數(shù)據(jù)中不能出現(xiàn)分隔字符岭接;
7.3.4 一維數(shù)據(jù)的處理
- 從空格分隔的數(shù)據(jù)讀入:
txt = open(fname).read() ls = txt.split() f.close()
- 從特殊符號分隔中讀入:
txt = open(fname).read ls = txt.split("&") f.close()
- 采用空格寫入文件:
ls = ['中國','美國','日本'] f = open(fname, 'w') f.write(' '.join(ls)) #join方法:將join前面的字符串分割放置到后邊的join參數(shù)中的各個元素之間 f.close()
- 采用特殊分隔寫入文件:
ls = ['中國','美國','日本'] f = open(fname, 'w') f.write('&'.join(ls)) #join方法:將join前面的字符串分割放置到后邊的join參數(shù)中的各個元素之間 f.close()
7.4 二維數(shù)據(jù)的格式化和處理
7.4.2 二維數(shù)據(jù)的表示
使用列表類型:二維列表(列表中嵌入列表);使用兩層for遍歷每個元素臼予;
7.4.3 CSV格式與二維數(shù)據(jù)的存儲
- CSV:Comma-Separated Values:國際通用的一二維數(shù)據(jù)存儲格式,一般
.csv
擴(kuò)展模啃沪;每行一個一維數(shù)據(jù)粘拾,采用逗號分隔,無空行创千;Excel和一般編輯軟件都可以讀入或另存為csv文件缰雇; - 如果某個元素缺失入偷,逗號仍要保留;二維數(shù)據(jù)的表頭可以作為數(shù)據(jù)存儲械哟,也可以另行存儲疏之;
- 一般索引習(xí)慣:
ls[row][column]
,先行后列暇咆;
7.4.4 二維數(shù)據(jù)的處理
- 從CSV格式的文件中讀取數(shù)據(jù):
fo = open(fname) ls = [] for line in fo: line = line.replace("\n","") #去掉最后的換行符 ls.append(line.split(",")) #按照逗號分隔開形成列表锋爪,把列表增加到ls列表中 fo.close()
- 將數(shù)據(jù)寫入CSV格式的文件:
ls = [[],[],[]] #二維列表 f = open(fname, 'w') for item in ls: f.write(','.join(item) + '\n') #元素間增加逗號,并在結(jié)尾增加換行符 f.close()
7.5 wordcloud庫使用說明
7.5.1 基本介紹
為詞云展示第三方庫:詞云以詞語為基本單位爸业,更加直觀和藝術(shù)的展示文本其骄;
7.5.2 使用說明
wordcloud庫把詞云當(dāng)作一個wordCloud對象;
wordcloud.WordCloud()代表一個文本對應(yīng)的詞云扯旷;
可以根據(jù)文本中詞語出現(xiàn)的頻率等參數(shù)繪制詞云拯爽;
繪制詞云的形狀、尺寸和顏色都可以設(shè)定钧忽;
常規(guī)方法w = wordcloud.WordCloud()
:
方法 | 描述 | 示例 |
---|---|---|
w.generate(txt) | 向WordCloud對象w中加載文本txt | w.generate("Python and WordCloud") |
w.to_file(filename) | 將詞云輸出為圖像文件毯炮,.png或.jpg格式 | w.to_file("outfile.png") |
import wordcloud c = wordcloud.WordCloud() c.generate("wordcloud by Python") c.to_file("ex.png")
步驟:
- 配置對象參數(shù);
- 加載詞云文本耸黑;
- 輸出詞云文件桃煎;
從文本到結(jié)果:
- 分隔:以空格分隔單詞;
- 統(tǒng)計:單詞出現(xiàn)次數(shù)并過濾崎坊;
- 字體:根據(jù)統(tǒng)計配置字號备禀;
- 布局:顏色環(huán)境尺寸;
配置對象參數(shù):
w = wordcloud.WordCloud(<參數(shù)>)
:
參數(shù) | 描述 | 示例 |
---|---|---|
width | 指定詞云對象生成圖片的寬度奈揍,默認(rèn)400像素曲尸; | w=wordcloud.WordCloud(width=600) |
height | 指定詞云對象生成圖片的高度,默認(rèn)200像素男翰; | w=wordcloud.WordCloud(height=400) |
min_font_size | 指定詞云中字體的最小字號另患,默認(rèn)4號; | w=wordcloud.WordCloud(min_font_size=10) |
max_font_size | 指定詞云中字體的最大字號蛾绎,根據(jù)高度自動調(diào)節(jié)昆箕; | w=wordcloud.WordCloud(max_font_size=20) |
font_step | 指定詞云中字體的步進(jìn)間隔,默認(rèn)為1租冠; | w=wordcloud.WordCloud(font_step=2) |
font_path | 指定詞云中字體文件的路徑鹏倘,默認(rèn)為None; | w=wordcloud.WordCloud(font_path="msyh.ttc") |
max_words | 指定詞云顯示的最大單詞數(shù)量顽爹,默認(rèn)為200纤泵; | w=wordcloud.WordCloud(max_words=20) |
stop_words | 指定詞云的排除列表,即不顯示的單詞列表镜粤; | w=wordcloud.WordCloud(stop_words={"Python"}) |
mask | 指定詞云形狀捏题,默認(rèn)為長方形玻褪,需要引用imread()函數(shù); | 見下面 |
background_color | 指定詞云圖片的背景顏色公荧,默認(rèn)為黑色带射; | w=wordcloud.WordCloud(background_color="white") |
mask參數(shù)from scipy.mis import imread mk=imread("pic.png") w=wordcloud.WordCloud(mask=mk)|
# 7.5wordcloud.py
import wordcloud
txt = "life is short, you need python"
w = wordcloud.WordCloud(background_color = "white")
w.generate(txt)
w.to_file("E:\\python\\learn\\ex.png")
<wordcloud.wordcloud.WordCloud at 0x2baf2e83e48>
# 7.5wordcloud2.py
import jieba
import wordcloud
txt = "程序設(shè)計語言是計算機(jī)能夠理解和識別用戶操作意圖的一種交互式體系,它按照特定規(guī)則組織計算機(jī)指令循狰,使計算機(jī)能夠自動進(jìn)行各種運算處理窟社。"
w = wordcloud.WordCloud(width=1000, font_path="msyh.ttc", height=700)
w.generate(" ".join(jieba.lcut(txt))) #將文本進(jìn)行分詞;lcut生成列表變量晤揣,其中每個元素是分隔之后的單詞桥爽,然后讓單詞以文本的形式由空格來分隔組成
w.to_file("E:\\python\\learn\\ex2.png")
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\zmzhang\AppData\Local\Temp\jieba.cache
Loading model cost 2.398 seconds.
Prefix dict has been built successfully.
<wordcloud.wordcloud.WordCloud at 0x2baf2f0e438>
7.6 政府工作報告詞云
基本思路:
- 讀取文件、分詞整理昧识;
- 設(shè)置并輸出詞云钠四;
- 觀察結(jié)果,優(yōu)化迭代跪楞;
# GovRptWordCloudv1.py
import jieba
import wordcloud
f = open("E:\\python\\learn\\2020政府工作報告.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud(width=1000, font_path="msyh.ttc", height=700, background_color="white",)
w.generate(txt)
w.to_file("E:\\python\\learn\\2020政府工作報告.png")
<wordcloud.wordcloud.WordCloud at 0x2baf2f1c048>
# GovRptWordCloudv2.py
import jieba
import wordcloud
from scipy.misc import imread
mask = imread("E:\\python\\learn\\fivestart.png")
f = open("E:\\python\\learn\\2020政府工作報告.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud(mask=mask, width=1000, font_path="msyh.ttc", height=700, background_color="white",)
w.generate(txt)
w.to_file("E:\\python\\learn\\2020政府工作報告2.png")
D:\anaconda\lib\site-packages\ipykernel_launcher.py:5: DeprecationWarning: `imread` is deprecated!
`imread` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
Use ``imageio.imread`` instead.
"""
<wordcloud.wordcloud.WordCloud at 0x2baf2efef60>
點贊缀去,關(guān)注,收藏??甸祭,?缕碎,??點贊,關(guān)注池户,收藏??咏雌,?,??點贊校焦,關(guān)注赊抖,收藏??,?寨典,??
????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????