七、文件和數(shù)據(jù)格式化
字符串格式化:將字符串按照一定的規(guī)格和樣式進(jìn)行規(guī)范
方法:"{} {} {}".format(),可用來(lái)輸出各種樣式
數(shù)據(jù)格式化:將一組數(shù)據(jù)按照一定的規(guī)格和樣式進(jìn)行規(guī)范,并且表達(dá)、存儲(chǔ)、計(jì)算等。
7.1 文件的使用
7.1.1 文件的類型
文件定義:文件是數(shù)據(jù)的抽象和集合躺枕,文件是存儲(chǔ)在輔助存儲(chǔ)器上的數(shù)據(jù)序列,文件是數(shù)據(jù)儲(chǔ)存的一種形式供填。
文件的展現(xiàn)形態(tài):文本文件拐云、二進(jìn)制文件,兩者只是展現(xiàn)方式不同近她,本質(zhì)來(lái)說(shuō)所有文件都是以二進(jìn)制形式進(jìn)行存儲(chǔ)叉瘩。
文本文件:由單一特定的編碼組成的文件,如UTF-8編碼泄私,一般適用于.txt文件或者.py文件
二進(jìn)制文件:直接由0和1構(gòu)成房揭,沒(méi)有統(tǒng)一的字符編碼,存在二進(jìn)制的0 1 結(jié)構(gòu)組織晌端,適用于.png文件或者avi文件
舉例:“中國(guó)是個(gè)偉大的國(guó)家捅暴!”
文本形式:中國(guó)是個(gè)偉大的國(guó)家!
二進(jìn)制形式:b'\xdb\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
實(shí)例:#文本形式打開文件
tf=open("f.txt","rt")
print(tf.readline())
tf.close()
#二進(jìn)制形式打開文件
bf=open("f.txt","rt")
print(bf.readline())
bf.close()
7.1.2 文件的打開和關(guān)閉
文件的處理步驟:打開 操作 關(guān)閉
讀文件常用函數(shù):a.read(size) a.readline(size) a.readlines(hint)
寫文件常用函數(shù):a.write(s) a.writelines(lines) a.seek(offset)
文件的絕對(duì)路徑:文件在電腦中的存儲(chǔ)位置
文件的相對(duì)路徑:文件相對(duì)于程序的位置
文件打開模式 | 描述 |
---|---|
'r' | 只讀模式咧纠,默認(rèn)值蓬痒,若文件不存在,返回FileNotFoundError |
'w' | 覆蓋寫模式漆羔,文件不存在時(shí)創(chuàng)建文件 |
'x' | 創(chuàng)建寫模式梧奢,文件不存在時(shí)創(chuàng)建,存在時(shí)返回FileNotFoundError |
'a' | 追加寫模式演痒,文件不存在時(shí)創(chuàng)建亲轨,存在時(shí)在文件后追加內(nèi)容 |
'b' | 二進(jìn)制文件模式 |
't' | 文本文件模式,默認(rèn)值 |
'+' | 與rwax一同使用鸟顺,在原功能基礎(chǔ)上增加功能 |
練習(xí):
f=open("f.txt") 文本形式惦蚊,只讀默認(rèn)
f=open("f.txt","rt") 文本形式讯嫂,只讀默認(rèn)
f=open("f.txt"蹦锋,"w") 文本形式,可編寫
f=open("f.txt"欧芽,"a+") 文本形式莉掂,追加寫模式
f=open("f.txt","x") 文本形式千扔,創(chuàng)建寫模式
f=open("f.txt"憎妙,"b") 二進(jìn)制形式库正,只讀默認(rèn)
f=open("f.txt","wb") 二進(jìn)制形式尚氛,創(chuàng)建寫模式
關(guān)閉文件:<變量名>.close()
7.1.3 文件內(nèi)容讀取
文件內(nèi)容讀取方法:.read .readline .readlines
函數(shù) | 描述 |
---|---|
<f>.read(size=-1) | 讀入全部?jī)?nèi)容诀诊,如果給出參數(shù),讀入前參數(shù)長(zhǎng)度 |
<f>.readline(size=-1) | 讀入一行內(nèi)容阅嘶,如果給出參數(shù),讀入前參數(shù)長(zhǎng)度行數(shù) |
<f>.readlines(hint=-1) | 讀入文件所有行载迄,以每行元素形成列表讯柔,如果給出參數(shù),讀入前參數(shù)行 |
遍歷全文本:
方法一:一次讀入护昧,統(tǒng)一處理魂迄,適用于小文件
fname=imput("請(qǐng)輸入需要打開的全文本文件名稱:")
fo=open(fname,"r")
txt=fo.read()
#對(duì)全文處理
fo.close()
方法二:按數(shù)量讀入,逐步處理惋耙,適用于大文件
fname=imput("請(qǐng)輸入需要打開的全文本文件名稱:")
fo=open(fname,"r")
while txt !="":
#對(duì)文件處理
txt=fo.read(2)
fo.close()
逐行遍歷:
方法一:一次讀入捣炬,分行處理,適用于大文件
fname=imput("請(qǐng)輸入需要打開的全文本文件名稱:")
fo=open(fname,"r")
for line in fo.readlines():
print(line)
fo.close()
方法二:分行讀入绽榛,按行處理湿酸,適用于小文件
fname=imput("請(qǐng)輸入需要打開的全文本文件名稱:")
fo=open(fname,"r")
for line in fo():
print(line)
fo.close()
7.1.4 數(shù)據(jù)的文件寫入
函數(shù) | 描述 |
---|---|
<f>.write(s) | 向文件寫入一個(gè)字符串或者字節(jié)流 |
<f>.writelines(lines) | 將一個(gè)元素全為字符串的列表寫入文件中 |
<f>.seek(offset) | 改變當(dāng)前的指針位置,0文件開頭 1當(dāng)前位置 2文件結(jié)尾 |
實(shí)例:
fo.open("output.txt","w+")
ls=["中國(guó)","法國(guó)","美國(guó)"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
print(line)
fo.close
7.2 自動(dòng)軌跡繪制
7.2.1 自動(dòng)軌跡繪制問(wèn)題分析
要求:根據(jù)腳本繪制圖形灭美,數(shù)據(jù)腳本是自動(dòng)化推溃,不是寫代碼,而是寫數(shù)據(jù)軌跡繪制
數(shù)據(jù)參數(shù)經(jīng)過(guò)程序加載運(yùn)行届腐,自動(dòng)繪制
基本要求:讀取文件铁坎、解析數(shù)據(jù)、繪制圖形
步驟:
1.定義數(shù)據(jù)文件格式(接口)
2.編寫程序犁苏,根據(jù)文件接口解析參數(shù)硬萍,繪制圖形
3.編寫數(shù)據(jù)文件
數(shù)據(jù)接口定義:具有個(gè)性色彩
舉例:7.2.2 自動(dòng)軌跡繪制實(shí)例
#AutoTraceDraw.py
import turtle as t
t.title('自動(dòng)軌跡繪制實(shí)例')
t.setup(800,600,0,0)
t.pencolor("red")
t.pensize(5)
#數(shù)據(jù)讀取
datals=[]
f=open("data.txt")
for line in f:
line=line.replace("\n","")
datals.append(list(map(eval,line.split(","))))
f.close()
#自動(dòng)繪制
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])
7.2.3 自動(dòng)化繪制實(shí)例拓展
1.自動(dòng)化思維:數(shù)據(jù)和功能分離,數(shù)據(jù)驅(qū)動(dòng)自動(dòng)運(yùn)行
2.接口化設(shè)計(jì):格式化數(shù)據(jù)接口围详,清晰明了
3.二維數(shù)據(jù)應(yīng)用:應(yīng)用維度組織數(shù)據(jù)朴乖,二維數(shù)據(jù)最常用
應(yīng)用擴(kuò)展:
1.擴(kuò)展接口設(shè)計(jì),增加更多的接口
2.擴(kuò)展功能設(shè)計(jì)短曾,弧度等更多功能
3.擴(kuò)展應(yīng)用設(shè)計(jì)寒砖,自動(dòng)發(fā)展為動(dòng)畫
7.3 一維數(shù)據(jù)的格式化和處理
7.3.1 數(shù)據(jù)組織的維度
從一個(gè)數(shù)據(jù)到多個(gè)數(shù)據(jù),數(shù)據(jù)組織形式
一維數(shù)據(jù):由對(duì)等關(guān)系的有序或者無(wú)序數(shù)據(jù)構(gòu)成嫉拐,采用線性方式組織哩都,對(duì)應(yīng)數(shù)據(jù)、列表婉徘、集合等概念漠嵌。
多維數(shù)據(jù):由多個(gè)一維數(shù)據(jù)構(gòu)成咐汞,是一維數(shù)據(jù)的組合形式,表格是典型的二維數(shù)據(jù)儒鹿,表頭是二維數(shù)據(jù)的一部分化撕。
多維數(shù)據(jù):由一維數(shù)據(jù)或二維數(shù)據(jù)在新的維度上擴(kuò)展形成,比如增加時(shí)間維度约炎。
高維數(shù)據(jù):僅利用最基本的二元關(guān)系展示數(shù)據(jù)間的復(fù)雜結(jié)構(gòu)
數(shù)據(jù)的操作周期:存儲(chǔ)<---->表示<---->操作
存儲(chǔ)強(qiáng)調(diào)格式植阴,表示注重類型,操作了解方式
7.3.2一維數(shù)據(jù)的表示
數(shù)據(jù)間有序:列表類型
數(shù)據(jù)間無(wú)序:集合類型
列表類型:可以表達(dá)一堆有序數(shù)據(jù)圾浅,for循環(huán)可以遍歷數(shù)據(jù)掠手,進(jìn)而對(duì)每個(gè)數(shù)據(jù)進(jìn)行處理
集合類型:可以表達(dá)一堆無(wú)序數(shù)據(jù),for循環(huán)可以遍歷數(shù)據(jù)狸捕,進(jìn)而對(duì)每個(gè)數(shù)據(jù)進(jìn)行處理
7.3.3一維數(shù)據(jù)的儲(chǔ)存
空格分離:不換行喷鸽,但是數(shù)據(jù)中不能存在空格
逗號(hào)分離:不換行,但是數(shù)據(jù)中不能存在逗號(hào)
其他方式:不換行灸拍,但是數(shù)據(jù)中不能存在此特殊符號(hào)
7.3.4一維數(shù)據(jù)的處理
將存儲(chǔ)的數(shù)據(jù)讀入程序做祝,將程序表示的數(shù)據(jù)寫入文件
從空格分離的文件中讀入數(shù)據(jù):
舉例:中國(guó) 美國(guó) 法國(guó) 英國(guó) 德國(guó) 日本
txt=open(fname).read()
ls=txt.split()
f.close()
從特殊符號(hào)分離的文件中讀入數(shù)據(jù):
舉例:中國(guó)法國(guó)德國(guó)$日本
txt=open(fname).read()
ls=txt.split($)
f.close()
采用空格分立方式將數(shù)據(jù)寫入文件:
ls=['中國(guó)','美國(guó)','法國(guó)']
f=open(fanme,'w')
f.write(''.join(ls))
f.close()
7.4二維數(shù)據(jù)的格式化和處理
7.4.1 二維數(shù)據(jù)的表示
表示:使用列表類型,二維列表
使用兩層for循環(huán)遍歷每一個(gè)元素鸡岗,第一層遍歷列表中的每一個(gè)元素
外層列表中每個(gè)元素可對(duì)應(yīng)一行或一列
7.4.2 CSV數(shù)據(jù)存儲(chǔ)格式
CSV:Comma-Spreated Values,是一種由逗號(hào)分隔值的存儲(chǔ)形式
國(guó)際通用的儲(chǔ)存方式混槐,每行是一個(gè)一維數(shù)據(jù),采用逗號(hào)分隔纤房,中間無(wú)空行
一般以.csv為擴(kuò)展名纵隔,Excel和一般數(shù)據(jù)軟件都可以讀入或者存儲(chǔ)該文件
規(guī)則:如果某個(gè)元素缺失,逗號(hào)仍然保留炮姨;二維數(shù)據(jù)表頭可以作為數(shù)據(jù)儲(chǔ)存捌刮,也可以另行儲(chǔ)存;逗號(hào)于數(shù)據(jù)之間無(wú)空行
一般索引習(xí)慣:ls [ row ][ column ],先行后列
7.2.3二維數(shù)據(jù)處理
讀入處理:
fo=open(fname)
ls=[]
for line in fo:
line=line.replace("\n","")
ls.append(line.split(","))
fo.close()
寫回處理:
ls=[[],[],[]]
f=open(fname,'w')
for item in ls:
f.write(','.join(item)+'\n')
fo.close()
逐一遍歷舒岸,采用二層循環(huán):
ls=[[1,2],[3,4][5,6]]
for row in ls:
for column in row:
print(column)
7.5wordcloud庫(kù)
7.5.1wordcloud庫(kù)基本介紹
定義:wordcloud庫(kù)是優(yōu)秀的詞云展示的第三方庫(kù)
用途:將文本變?yōu)樵~云
詞云:將詞語(yǔ)通過(guò)圖形可視化的方式绅作,直觀和藝術(shù)的展示出來(lái)
安裝:(cmd命令行)pip install wordcloud
7.5.2wordcloud庫(kù)的使用
將詞云當(dāng)做一個(gè)WordCloud對(duì)象,庫(kù)名全小寫蛾派,具體詞云有大寫有小寫
一個(gè)文本對(duì)應(yīng)的詞云:wordcloud,WordCloud()
可以根據(jù)文本中詞語(yǔ)出現(xiàn)的頻率等參數(shù)繪制詞云俄认,形狀尺寸顏色都可以自己設(shè)定
w=wordcloud,WordCloud()以wordcloud為對(duì)象基礎(chǔ),向其中配置參數(shù)洪乍,加載文本眯杏,輸出文件
參數(shù) | 描述 |
---|---|
w.generate(txt) | 向?qū)ο笾屑虞d文本 |
w.to_file(filename) | 將詞云輸出為圖片文件 .png或.jpg格式 |
詞云繪制的步驟介紹:
生成一個(gè)詞云對(duì)象,配置相關(guān)參數(shù)
加載一段文本到詞云對(duì)象中
生成的程序詞云對(duì)象輸出為文件
舉例:
import wordcloud
c=wordcloud,WordCloud()
c.generate("wordcloud by Python")
c.to_file("pywordcloud.png")
wordcloud運(yùn)行步驟:
分隔:以空格分隔單詞
統(tǒng)計(jì):?jiǎn)卧~出現(xiàn)的次數(shù)并過(guò)濾
字體:概括統(tǒng)計(jì)壳澳,配置字號(hào)
布局:顏色岂贩、環(huán)境、尺寸
參數(shù) | 描述 |
---|---|
width | 指定詞云生成寬度巷波,默認(rèn)400像素 |
height | 指定詞云生成高度萎津,默認(rèn)200像素 |
min_font_size | 指定詞云中最小字體字號(hào)卸伞,默認(rèn)4號(hào) |
max_font_size | 指定詞云中最大字體字號(hào),根據(jù)高度調(diào)節(jié) |
font_step | 指定詞云中字體字號(hào)的步進(jìn)間隔锉屈,默認(rèn)為1 |
font_path | 制定字體文件路徑荤傲,默認(rèn)為None |
max_word | 指定詞云中最大單詞顯示數(shù),默認(rèn)為200 |
stop_word | 排除列表颈渊,即不顯示單詞列表 |
mask | 指定詞云形狀遂黍,默認(rèn)為長(zhǎng)方形,需要引用imread()函數(shù) |
background_color | 指定詞云背景顏色俊嗽,默認(rèn)為黑色 |
形狀舉例:
from scipy.misc import imread
mk=imread("pic.png")
w=wordcloud.WordCloud(mask=mk)
英文詞云實(shí)例:
import wordcloud
txt="life is short,but you need python"
w=wordcloud.WordCloud(background_color="white")
w.generate(txt)
w.to_file("pywcloud.png")
中文詞云實(shí)例:
import jieba
import wordcloud
txt="愿你妓湘,春賞繁櫻,夏觀夜星乌询,秋見霜菊,冬遇初雪豌研。人間的揚(yáng)塵里妹田,只看得見美事。"
w=wordcloud.WordCloud(weight=1000,font_path="msyh.ttc",height=700)
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")
7.6 政府工作報(bào)告實(shí)例
7.6.1 問(wèn)題分析
政府工作報(bào)告詞云:對(duì)于政府工作報(bào)告等政府文件鹃共,直觀的理解
需求:體會(huì)價(jià)值觀鬼佣、生成詞云、優(yōu)化詞云
方法:
1.讀取文件霜浴,分詞管理
2.設(shè)置并輸出詞云
3.觀察結(jié)果晶衷,優(yōu)化迭代
7.6.2 實(shí)例
新時(shí)代中國(guó)特色社會(huì)主義文本實(shí)例:
#GovRptWordCloudV1.py
import jieba
import wordcloud
f=open("新時(shí)代中國(guó)特色社會(huì)主義.txt","r",encoding="utf-8")
t=f.read()
f.close()
ls=jieba.lcut(t)
txt="",join(ls)
w=wordcloud.WordCloud(font_path="msyh.ttc",width=1000,height=700,background_color="white"\)
w.generate(txt)
w.to_file("gvowordcloud.png")
關(guān)于實(shí)施向戰(zhàn)略的意見:
#GovRptWordCloudV1.py
import jieba
import wordcloud
f=open("關(guān)于實(shí)施鄉(xiāng)村振興戰(zhàn)略的意見.txt","r",encoding="utf-8")
t=f.read()
f.close()
ls=jieba.lcut(t)
txt="",join(ls)
w=wordcloud.WordCloud(font_path="msyh.ttc",width=1000,height=700,background_color="white"\)
w.generate(txt)
w.to_file("gvowordcloud.png")
7.6.3 問(wèn)題改進(jìn)
新時(shí)代中國(guó)特色社會(huì)主義問(wèn)題改進(jìn):
#GovRptWordCloudV1.py
import jieba
import wordcloud
from scipy.misc import imread
mask=imread("fivestar.png")
f=open("新時(shí)代中國(guó)特色社會(huì)主義.txt","r",encoding="utf-8")
t=f.read()
f.close()
ls=jieba.lcut(t)
txt="",join(ls)
w=wordcloud.WordCloud(font_path="msyh.ttc",mask=mask,width=1000,height=700,background_co\lor="white")
w.generate(txt)
w.to_file("gvowordcloud.png")
關(guān)于實(shí)施鄉(xiāng)村振興戰(zhàn)略的意見改進(jìn):
#GovRptWordCloudV1.py
import jieba
import wordcloud
from scipy.misc import imread
mask=imread("fivestar.png")
f=open("關(guān)于實(shí)施鄉(xiāng)村振興戰(zhàn)略的意見.txt","r",encoding="utf-8")
t=f.read()
f.close()
ls=jieba.lcut(t)
txt="",join(ls)
w=wordcloud.WordCloud(font_path="msyh.ttc",mask=mask,width=1000,height=700,background_co\lor="white")
w.generate(txt)
w.to_file("gvowordcloud.png")
7.6.3 問(wèn)題拓展
1.了解wordcloud參數(shù),拓展詞云能力
2.特色設(shè)計(jì)阴孟,自制風(fēng)格
3.更多文件的練習(xí)