1.文件概述
文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容,文件是数据的集合和抽象,用文件形式组织和表达数据更有效也更为灵活
2.文件类型
文本文件(有统一的字符编码)
二进制文件(无统一的字符编码)
二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关,只能当做字节流,不能看作字符串
binFile=open(“7.1.txt”,“rb”)#表示二进制文件方式
采用文本方式读入(从外存读入到内存)文件,文件经过编码(如UTF-8)形成字符串,打印出有含义的字符。
采用二进制方式打开文件,文件被解析为字节(byte)流
由于存在编码,字符串中的一个字符由两个字节表示
1.open()函数
python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量(文件变量)的关联,open()格式:<变量名>=open(<文件名>,<打开方式>)
2.文件名的获取方式
(1)文件路径和名称: “D:/PYE/f.txt”
(2)源文件同目录可省略路径:“f.txt”
(3)open()函数提供7种基本的打开模式
打开模式 | 含义 |
---|---|
‘r’ | 只读模式,如果文件不存在返回异常FileNotDoundError,默认值 |
‘w’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖文源文件 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回议程FileExistsError |
‘a’ | 追加写模式,文件不存在则创建,存在则在原文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值 |
‘+’ | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
(4)Python提供的四个常用的文件内容读取方法
方法 | 含义 |
---|---|
.readall() | 读入整个文件内容,返回一个字符串或字节流 |
.read(size=-1) | 从文件中读入整个文件内容,如果给出参数, 读入前size个字节长度的字符串或字节流 |
.readline(size=-1) | 从文件中读入一行内容,如果给出参数,读入 该行前size个字节长度的字符串或字节流 |
.readlines(hint=-1) | 从文件中读入所有行,以每行为元素形成一个 列表,如果给出参数,读入hint行 |
(5)python提供3个文件内容写入有关的方法,如图所示。
方法 | 含义 |
---|---|
.write(s) | 向文件写一个字符串或字节流 |
.writelines(lines) | 将一个元素为字符串的列表写入文件 |
.seek(offset) | 改变当前文件操作指针的位置,offset的值: 0:文件开头;1:当前位置;2:文件结尾 |
PIL(python image library)库是python语言的第三方库,需要通过pip工具安装。pip install pillow
PIL库支持图像存储、显示和处理,他能过处理几乎所有图片格式,可以完成对图像的缩放、裁剪、叠加以及向图像添加线条、图像和文字等操作。
PIL库可以完成图像归档和图像处理两方面功能需求。
1.PIL库的独享读取和创建方法:
方法 | 描述 |
---|---|
Image.open(filename) | 根据参数加载图像内容 |
Image.new(mode,size,color) | 根据给定参数创建一个新的图像 |
Image.open(StringIO.StringIO(buffer)) | 从字符串中获取图像 |
Image.frombytes(mode,size,data) | 根据像素点data创建图像 |
Image.verify() | 对图像文件完整性进行检查,返回异常 |
2.PIL库包含了21个与图片相关的类,可以看作是子库或PIL库中的模板:
3.Image类有四个处理图片的常用属性
属性 | 描述 |
---|---|
Image.format | 标识图像格式或来源,如果图像不是从文件读取,值是None |
Image.mode | 图像的色彩模式,"L"灰度图像、"RGB"真彩色图像、“CMYK” 出版图像(CMYK指的是印刷四色模式) |
Image.size | 图像宽度和高度,单位是像素(px),返回值是二元元组(tuple) |
Image.palette | 调色板属性,返回一个ImagePalette类型 |
4.Image类的图像转换和保存方法如表所示:
方法 | 描述 |
---|---|
Image.save(filename.format) | 将图像保存为filename文件名,format是图片的格式 |
Image.convert(mode) | 使用不同的参数,转换图像为新的模式 |
Image.thumbnail(size) | 创建图像的缩略图,size是缩略图尺寸的二元元组 |
5.Image类可以缩放和旋转图像:
方法 | 描述 |
---|---|
Image.resize(size) | 按size大小调整图像,生成副本 |
Image.rotate(angle) | 按angle角度逆时针旋转图像,生成副本 |
6.Image的另一些方法:
方法 | 描述 |
---|---|
Image.point(func) | 根据函数func功能对每个元素进行运算,返回图像副本 |
Image.split() | 提取RGB图像的每个颜色通道,返回图像副本 |
Image.merge(mode,bands) | 合并通道,采用mode色彩,bands是新色的色彩通道 |
Image.blend(im1,im2,alpha) | 将两幅图片im1和im2按照如下方式插值后生成新的图像: Im1*(1.0-alpha)+im2*alpha |
Image.seek(frame) | 在给定的文件序列中查找指定的帧。如果超越了末尾则产生一个EOFError的异常,当文件被打开时,PIL库自动指定到第0帧上。 |
Image.tell() | 返回当前帧所处位置,从0开始计算。 |
7.实例通过分离RGB图片的三个颜色通道实现颜色交换。
from PIL import Image
im = Image.open(‘birdnest.jpg’)
r,g,b=im.split()
om=Image.merge(“RGB”,(b,g,r))
om.save(‘birdnestBGR.jpg’)
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8D1Pg81L-1588945271105)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588746040015.png)]
8.操作图像的每个像素点需要通过函数实现,采用lambda函数和point()方法搭配使用
>>> from PIL import Image
>>> im = Image.open(‘F:\学习\大二下\python\代码\birdnest.jpg’)
>>> r,g,b=im.split()
>>> newg = g.point(lambda i:i*0.9)
>>> newb = b.point(lambda i:i<100)
>>> om = Image.merge(im.mode,(r,newg,newb))
>>> om.save(‘F:\学习\大二下\python\代码\birdnestMerge.jpg’)
结果展示:(去掉发射光线)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRa1yiTd-1588945271114)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588746111307.png)]
方法表示 | 描述 |
---|---|
ImageFilter.BLUR | 图像的模糊效果 |
ImageFilter.CONTOUR | 图像的轮廓效果 |
ImageFilter.DETAIL | 图像的细节效果 |
ImageFilter.EDGE_ENHANCE | 图像的边界效果加强 |
ImageFilter.EDGE_ENHANCE_MORE | 图像的阈值边界加强效果 |
ImageFilter.EMBOSS | 图像的浮雕效果 |
ImageFilter.FIND_EDGES | 图像的边界效果 |
ImageFilter.SMOOTH | 图像的平滑效果 |
ImageFilter.SMOOTH_MORE | 图像的阈值平滑效果 |
ImageFilter.SHARPEN | 图像的锐化效果(衔接处的悬崖) |
利用Image类的filter()方法可以使用ImageFilter类,如下:Image.filter(ImageFilter.function)
1.微实例7.5-2图像的轮廓获取。
from PIL import Image
from PIL import ImageFilter
im = Image.open(‘birdnest.jpg’)
om=im.filter(ImageFilter.CONTOUR)
om.save(‘birdnestContour.jpg’)
处理结果:
2.ImageEnhance类提供了更高级的图像增强需求,他提供调整色彩度、亮度、对比度、锐化等功能
方法 | 描述 |
---|---|
ImageEnhance.enhance(factor) | 对选择属性的数值增强factor倍 |
ImageEnhance.Color(im) | 调整图像的颜色平衡 |
ImageEnhance.Contrast(im) | 调整图像对比度(黑点比白点,越大渐变) |
ImageEnhance.Brightness(im) | 调整图像的亮度 |
ImageEnhance.Sharpness(im) | 调整图像的锐度 |
3.微实例7.5-3图像的对比度增强
from PIL import Image
from PIL import ImageEnhance
im=Image.open(‘birdnest.jpg’)
om=ImageEnhance.Contrast(im)
om.enhance(20).save(‘birdnestEnConterast.jpg’)
结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ej5qp0Q4-1588945271118)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\image-20200429205639671.png)]
位图图片是由不同颜色像素点组成的规则分布,如果采用字符串代替像素,图像就成为了字符画。
fo = open("price2016.csv","r")
ls=[]
for line in fo:
line = line.replace("\n","")
ls.append(line.split(","))//通过,分隔开,在每一行都分隔开。
print(ls)
fo.close()
运行结果:没有\n
[
[‘城市’,‘环比’,‘同比’,‘定基\n’],
[‘北京’,‘101.5’,‘120.7’,‘121.4\n’],
[‘上海’,‘101.2’,‘127.3’,‘127.8\n’],
[‘广州’,‘101.3’,‘119.4’,‘120.0\n’]
]
fr = open("price2016.csv","r")
fw=open("price2016out.csv","w")
ls=[]
for line in fr:
line = line.replace("\n","")
ls.append(line.split(","))
for i in reage(len(ls)):
for j in range(len(ls[i])):
if ls[i][j].replace(".","").isnumeric():
ls[i][j]="{:.2}%".format(float(ls[i][j])/100)
for row in ls:
print(row)
fw.write(",".join(row)+"\n")
fr.cloas()
fw.close()
#e13.1csv2html.py
seg1='''\n\n2016年7月部分大中城市新建住宅价格指数
\n'''
seg2=" \n"
seg3="
\n"
def fill_data(locls):
seg = '{} {} {} {} \n'.format(*locls)
return seg
fr = open("price2016.csv","r")
ls=[]
for line in fr:
line = line.replace("\n","")
ls.append(line.split(","))
fr.close()
fw = open("price2017.html","w")
fw.write(seg1)
fw.write('{} \n{} \n{} \n{} \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.dump(obj,sort_keys=False,indent=None) | 将Python的数据类型转换为JSon格式,属于编码过程把一个Python对象编码转换成JSON字符串,参数含义:obj:Python对象;sort_keys将数据根据keys的值进行排序,indent:(缩进数)应该是一个非负整型 |
json.loads(string) | 将JSON格式字符串转换为Python数据类型,属于解码过程,把JSON格式字符串解码转换成Python对象 |
json.dump(obj,fp,sort_keys=False,indent=None) | 与dunps()功能一致,输出到文件fp |
json.load(fp) | 与loads()功能一致,从文件fp读入 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqVwVssR-1588945271123)(C:\Users\60917\AppData\Roaming\Typora\typora-user-images\1588846199962.png)]
#e14.1cvs2json.py
import json
fr = open("price2016.csv","r")
ls=[]
for line in fr:
line = line.replace("\n","")
ls.append(line.split(','))
fr.close()
fw = open("price2016.json","w")
for i in range(1,len(ls)):
ls[i] = dict(zip(ls[0],ls[i]))#zip的作用就是把两个数组糅合起来
json.dump(ls[1:],fw,sort_keys= True,indent=4)
fw.close()
#14.2json2csv
import json
fr = open("price2016.json","r")
ls = json.load(fr)
data = [list(ls[0].keys())]
for item in ls:
data.append(list(item.values()))
fr.close()
fw = open("price2016_from_json.csv","w")
for item in data:
fw.write(",".join(item)+"\n")
fw.close()
dump(ls[1:],fw,sort_keys= True,indent=4)
fw.close()
#14.2json2csv
import json
fr = open("price2016.json","r")
ls = json.load(fr)
data = [list(ls[0].keys())]
for item in ls:
data.append(list(item.values()))
fr.close()
fw = open("price2016_from_json.csv","w")
for item in data:
fw.write(",".join(item)+"\n")
fw.close()