文件的使用
python能夠以文本和二進(jìn)制兩種方式處理文件
二進(jìn)制文件直接由比特0和比特1組成胡桨,沒有統(tǒng)一字符編碼材诽,文件內(nèi)部數(shù)據(jù)的組織格式與文件用途有關(guān)事格。二進(jìn)制文件和文本文件最主要的區(qū)別在于是否有統(tǒng)一的字符編碼
- 理解文本文件和二進(jìn)制文件的區(qū)別
用文本編輯器生成一個包含“中國是個偉大的國家介粘!”的txt格式文本文件,然后分別用文本文件格式和二進(jìn)制文件格式讀入众雷,并打印輸出效果。
textFile=open('7.1.txt','rt',encoding='utf-8')
print(textFile.readline())
textFile.close()
binFile=open('7.1.txt','rb')
print(binFile.readline())
binFile.close()
-
文件的打開模式(共7個)
open()函數(shù)默認(rèn)采用'rt'(文件只讀)模式
讀取一個二進(jìn)制文件做祝,如一張圖片砾省,一段視頻或一段音樂,需要使用文件
當(dāng)文件被打開后混槐,根據(jù)文件打開方式不同可以對文件進(jìn)行相應(yīng)的讀寫操作编兄。
-
文件內(nèi)容讀寫方式(共4個)
文本文件逐行打印
用戶輸入文件路徑,以文本文件方式讀入文件內(nèi)容并逐行打印
fname=input("請輸入要打開的文件:")
fo=open(fname,"r",encoding='utf-8')
for line in fo.readlines():
print(line)
fo.close()
-
文件內(nèi)容寫入方法(共3個)
向文件寫入一個列表
向文件寫一個列表類型纵隔,并打印輸出結(jié)果
fname=input("請輸入要寫入的文件:")
fo=open(fname,"w+",encoding='utf-8')
ls=["唐詩","宋詞","元曲"]
fo.writelines(ls)
for line in fo:
print(line)
fo.close()
程序沒有輸出寫入的內(nèi)容翻诉,這是因為文件寫入內(nèi)容后炮姨,當(dāng)前文件操作指針在寫入內(nèi)容的后面,第五行到第七行代碼從指針開始想后讀入并打印內(nèi)容碰煌,被寫入的內(nèi)容卻在指針的前面舒岸,因此未能被打印出來。
解決方法:可以在寫入文件后增加一條代碼fo.seek(0)將文件操作指針返回到文件開始芦圾,即可顯示寫入的內(nèi)容蛾派。
fname=input("請輸入要寫入的文件:")
fo=open(fname,"w+",encoding='utf-8')
ls=["唐詩","宋詞","元曲"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
print(line)
fo.close()
PIL庫的使用
PIL庫是一個具有強(qiáng)大圖像處理能力的第三方庫,不僅包含了豐富的像素个少,色彩操作功能洪乍,還可以用于圖像歸檔和批量處理。
PIL庫支持圖像存儲夜焦、顯示和處理壳澳,他能夠處理幾乎所有的圖片格式,可以完成對圖像的縮放茫经、剪裁巷波、疊加以及向圖像添加線條圖像和文字等操作。
PIL庫主要實現(xiàn)圖像歸檔和圖像處理兩方面功能需求卸伞。
- 圖像歸檔
對圖像進(jìn)行批處理抹镊、生成圖像預(yù)覽、圖像格式轉(zhuǎn)換等 - 圖像處理
圖像基本處理荤傲、像素處理垮耳、顏色
處理等。
PIL庫的image類解析
image是PIL最重要的類遂黍,它代表一張圖片终佛,引入這個類的方法是
from PIL import Image
-
Image類的圖像讀取和創(chuàng)建方法(共5個)
通過image打開圖像文件時,圖像的柵格數(shù)據(jù)不會被直接解碼或者加載妓湘,程序只是讀取了圖像文件頭部的元數(shù)據(jù)信息查蓉,這部分信息標(biāo)識了圖像格式、顏色榜贴、大小等豌研。
-
Image類的常用屬性(共4個)
Image還能讀取序列類圖像文件,包括gif,fli,flc,tiff等格式文件唬党。open()方法打開一個圖像時自動加載到序列的第一幀鹃共,使用seek()和tell()方法可以在不同幀之間移動。
- Image類的序列圖像操作方法(共2個)
Image.seek(frame)
跳轉(zhuǎn)并返回圖像中的指定幀
Image.tell()
返回當(dāng)前幀的序號
GIF文件圖像的提取
對一個gif格式的動態(tài)文件驶拱,提取其中各幀圖像霜浴,并保存為文件。
from PIL import Image
im=Image.open("F:\python\第七章\pica.gif") #讀入一個gif文件
try:
im.save('picframe{:02d}.png'.format(im.tell()))
while True:
im.seek(im.tell()+1)
im.save('picframe{:02d}.png'.format(im.tell()))
except:
print("處理結(jié)束")
-
image類的圖像轉(zhuǎn)換和保存方法(共3個)
PIL庫還提供了格式轉(zhuǎn)換功能
生成縮略圖
-
Image類可以縮放和旋轉(zhuǎn)圖像
retate()方法是以逆時針旋轉(zhuǎn)的角度值作為參數(shù)來旋轉(zhuǎn)圖像蓝纲。
-
image類的圖像像素和通道處理方法(共4個)
圖像的顏色交換
交換圖像中的顏色阴孟∩稳遥可以通過分離RGB圖片中的3個顏色通道實現(xiàn)顏色交換。
from PIL import Image
im=Image.open('birdnest.jpg')
r,g,b=im.split()
om=Image.merge("RGB",(b,g,r))
om.save("birdnestGGR.jpg")
原圖
交換后
操作圖像的每個像素點需要通過函數(shù)實現(xiàn)永丝,可以采用lamba函數(shù)和point()方法锹漱。
PIL庫的ImageFilter類和ImageEnhance類提供了過濾圖像和增強(qiáng)圖像的方法。
- ImageFilter類的預(yù)定義過濾方法(共10個)
利用Image類的filter方法可以使用ImageFilter類
Image.filter(ImageFilter.function)
圖像的輪廓獲取
from PIL import Image
from PIL import ImageFilter
im=Image.open('F:\\python\\第七章\\birdnest.jpg')
om=im.filter(ImageFilter.CONTOUR) #圖像的輪廓效果
om.save("F:\\python\\第七章\\newbird.jpg")
ImageEnhance類提供了更高級的圖像增強(qiáng)功能慕嚷,如調(diào)節(jié)色彩哥牍、亮度、對比度喝检、銳化等
-
ImageEnhance類的圖像增強(qiáng)和濾鏡方法(共5個)
圖像的對比度增強(qiáng)
增強(qiáng)圖像的對比度為初始的20倍嗅辣。
from PIL import Image
from PIL import ImageEnhance
im=Image.open('F:\\python\\第七章\\birdnest.jpg')
om=ImageEnhance.Contrast(im) #調(diào)整圖像的對比度
om.enhance(20).save('F:\\python\\第七章\\bird1.jpg')
一二維數(shù)據(jù)的格式化和處理
一二維數(shù)據(jù)的表示和書寫,CSV文件的每一行是數(shù)據(jù)挠说,可以使用python中的列表類型表示澡谭,整個CSV文件是一個二維數(shù)據(jù),由表示每一行的列表類型作為元素纺涤,組成一個二維列表译暂。
導(dǎo)入CSV格式數(shù)據(jù)到列表
fo=open("F:\\python\\第七章\\7.12.csv")
ls=[]
for line in fo:
line=line.replace("\n","")
ls=line.split(",")
lns=""
for s in ls:
lns+="{}\t".format(s)
print(lns)
fo.close()
CSV格式的HTML展示
這是一個將CSV格式轉(zhuǎn)換為HTML展示的實例
將CSV文件轉(zhuǎn)化為HTML文件需要三個步驟:
1、 讀入CSV文件撩炊,獲得文件數(shù)據(jù)
2、對數(shù)據(jù)進(jìn)行格式化處理和轉(zhuǎn)換
3崎脉、輸出HTML格式的文件
seg1='''
<!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=gb2312>
<h2 align=center>2016年7月部分大中城市新建住宅價格指數(shù)</h2>
<table border='1' align='center' width='700%'>
<tr bgcolor='orange'>\n
'''
seg2 = "</tr>\n"
seg3 = "</table>\n</body>\n</html>"
def fill_data(locls):
seg = '<tr><td align="center">{}</td><td align="center">\
{}</td><td align="center">{}</td><tdalign="center">\
{}</td></tr>\n'.format(*locls)
return seg
fr=open("F:\\python\\第七章\\7.12.csv","r")
ls=[]
for line in fr:
line=line.replace("\n","")
ls.append(line.split(","))
fr.close()
fw = open("F:\\python\\第七章\\price2016.html", "w")
fw.write(seg1)
fw.write('<th width="25%">{}</th>\n<th width="25%">{}</th>\n<th width="25%">{}</th>\n<th width="25%">{}</th>\n'.format(*ls[0]))
fw.write(seg2)
for i in range(len(ls)-1):
fw.write(fill_data(ls[i+1]))
fw.write(seg3)
fw.close()
JSON庫的使用
json庫是處理JSON格式的python標(biāo)準(zhǔn)庫
import json
-
json庫的操作類函數(shù)(共四個)