Jupyter筆記-Python語法基礎(chǔ)(U.7)

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 文件類型

  1. 文件是數(shù)據(jù)的抽象和集合:存儲在輔助存儲器上的數(shù)據(jù)序列贺嫂;數(shù)據(jù)存儲的一種形式;有文本文件和二進(jìn)制文件;
  2. 文本文件:由單一特定編碼組成的文件,如UTF-8編碼囤官;存儲著的長字符串;例如:.txt蛤虐、.py等;
  3. 二進(jìn)制文件:直接由比特0和1組成肝陪,沒有統(tǒng)一字符編碼驳庭;一般存在二進(jìn)制0和1的組織結(jié)構(gòu),即文本格式氯窍;例如:.png饲常、.avi文件等;

7.1.2 文件打開與關(guān)閉

步驟:打開-操作-關(guān)閉

  1. a = open( , ):打開文件(文件存儲狀態(tài)->文件的占用狀態(tài))狼讨;a.close():關(guān)閉文件(文件的占用狀態(tài)->文件存儲狀態(tài));
  2. 讀文件:a.read(size)贝淤、a.readline(size)a.readlines(hint)政供;
  3. 寫文件: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():['中國是一個偉大的國家洲胖!']

文件的全文本操作:

  1. 遍歷全文本:法一(一次性讀入不適用大文本)
    ``
    fname = input("請輸入要打開的文件名稱:")
    fo = open(fname,"r")
    txt = fo.read() #一次讀入济榨,一次遍歷

對全文txt進(jìn)行處理

fo.close()
``

  1. 遍歷全文本:法二(按數(shù)量讀入,逐步處理)
    ``
    fname = input("請輸入要打開的文件名稱:")
    fo = open(fname,"r")
    txt = fo.read(2) #從文件中讀入2個字節(jié)
    while txt != "":

    對全文txt進(jìn)行處理

    txt = fo.read(2)
    fo.close()
    ``
  2. 逐行遍歷文件:法一(一次讀入绿映,分行處理)
    fname = input("請輸入要打開的文件名稱:") fo = open(fname,"r") for line in fo.readlines(): print(line) fo.close()
  3. 逐行遍歷文件:法二(分行讀入擒滑,逐行處理)
    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 實例

基本思路:

  1. 定義數(shù)據(jù)文件格式(接口)樱拴;
  2. 編寫程序柠衍,根據(jù)文件接口解析參數(shù)繪制圖形洋满;
  3. 編制數(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ù)的存儲

  1. 空格分隔:使用一個或多個空格分隔進(jìn)行存儲签钩,不換行掏呼;缺點是數(shù)據(jù)中不能存在空格;
  2. 逗號分隔:使用英文半角逗號進(jìn)行分隔铅檩,不換行憎夷;缺點是數(shù)據(jù)不能存在逗號;
  3. 其他方式:采用特殊符號進(jìn)行分隔柠并;缺點是數(shù)據(jù)中不能出現(xiàn)分隔字符岭接;

7.3.4 一維數(shù)據(jù)的處理

  1. 從空格分隔的數(shù)據(jù)讀入:
    txt = open(fname).read() ls = txt.split() f.close()
  2. 從特殊符號分隔中讀入:
    txt = open(fname).read ls = txt.split("&") f.close()
  3. 采用空格寫入文件:
    ls = ['中國','美國','日本'] f = open(fname, 'w') f.write(' '.join(ls)) #join方法:將join前面的字符串分割放置到后邊的join參數(shù)中的各個元素之間 f.close()
  4. 采用特殊分隔寫入文件:
    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ù)的存儲

  1. CSV:Comma-Separated Values:國際通用的一二維數(shù)據(jù)存儲格式,一般.csv擴(kuò)展模啃沪;每行一個一維數(shù)據(jù)粘拾,采用逗號分隔,無空行创千;Excel和一般編輯軟件都可以讀入或另存為csv文件缰雇;
  2. 如果某個元素缺失入偷,逗號仍要保留;二維數(shù)據(jù)的表頭可以作為數(shù)據(jù)存儲械哟,也可以另行存儲疏之;
  3. 一般索引習(xí)慣:ls[row][column],先行后列暇咆;

7.4.4 二維數(shù)據(jù)的處理

  1. 從CSV格式的文件中讀取數(shù)據(jù):
    fo = open(fname) ls = [] for line in fo: line = line.replace("\n","") #去掉最后的換行符 ls.append(line.split(",")) #按照逗號分隔開形成列表锋爪,把列表增加到ls列表中 fo.close()
  2. 將數(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")

步驟:

  1. 配置對象參數(shù);
  2. 加載詞云文本耸黑;
  3. 輸出詞云文件桃煎;

從文本到結(jié)果:

  1. 分隔:以空格分隔單詞;
  2. 統(tǒng)計:單詞出現(xiàn)次數(shù)并過濾崎坊;
  3. 字體:根據(jù)統(tǒng)計配置字號备禀;
  4. 布局:顏色環(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 政府工作報告詞云

基本思路:

  1. 讀取文件、分詞整理昧识;
  2. 設(shè)置并輸出詞云钠四;
  3. 觀察結(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)注赊抖,收藏??,?寨典,??
????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????

在這里插入圖片描述

在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氛雪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耸成,更是在濱河造成了極大的恐慌报亩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件井氢,死亡現(xiàn)場離奇詭異弦追,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)花竞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門骗卜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人左胞,你說我怎么就攤上這事寇仓。” “怎么了烤宙?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵遍烦,是天一觀的道長。 經(jīng)常有香客問我躺枕,道長服猪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任拐云,我火速辦了婚禮罢猪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叉瘩。我一直安慰自己膳帕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布薇缅。 她就那樣靜靜地躺著危彩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泳桦。 梳的紋絲不亂的頭發(fā)上汤徽,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音灸撰,去河邊找鬼谒府。 笑死,一個胖子當(dāng)著我的面吹牛浮毯,可吹牛的內(nèi)容都是我干的完疫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼亲轨,長吁一口氣:“原來是場噩夢啊……” “哼趋惨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惦蚊,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤器虾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹦锋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兆沙,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年莉掂,在試婚紗的時候發(fā)現(xiàn)自己被綠了葛圃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖库正,靈堂內(nèi)的尸體忽然破棺而出曲楚,到底是詐尸還是另有隱情,我是刑警寧澤褥符,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布龙誊,位于F島的核電站,受9級特大地震影響喷楣,放射性物質(zhì)發(fā)生泄漏趟大。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一铣焊、第九天 我趴在偏房一處隱蔽的房頂上張望逊朽。 院中可真熱鬧,春花似錦曲伊、人聲如沸叽讳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绽榛。三九已至,卻和暖如春婿屹,著一層夾襖步出監(jiān)牢的瞬間灭美,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工昂利, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留届腐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓蜂奸,卻偏偏與公主長得像犁苏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扩所,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349