Python学习第七章

文件的使用

python能够以文本和二进制两种方式处理文件
二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码

  • 理解文本文件和二进制文件的区别
    用文本编辑器生成一个包含“中国是个伟大的国家!”的txt格式文本文件,然后分别用文本文件格式和二进制文件格式读入,并打印输出效果。
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()函数默认采用'rt'(文件只读)模式
读取一个二进制文件,如一张图片,一段视频或一段音乐,需要使用文件
当文件被打开后,根据文件打开方式不同可以对文件进行相应的读写操作。

  • 文件内容读写方式(共4个)


文本文件逐行打印

用户输入文件路径,以文本文件方式读入文件内容并逐行打印

fname=input("请输入要打开的文件:")
fo=open(fname,"r",encoding='utf-8')
for line in fo.readlines():
    print(line)
fo.close()
  • 文件内容写入方法(共3个)


向文件写入一个列表

向文件写一个列表类型,并打印输出结果

fname=input("请输入要写入的文件:")
fo=open(fname,"w+",encoding='utf-8')
ls=["唐诗","宋词","元曲"]
fo.writelines(ls)
for line in fo:
    print(line)
fo.close()

程序没有输出写入的内容,这是因为文件写入内容后,当前文件操作指针在写入内容的后面,第五行到第七行代码从指针开始想后读入并打印内容,被写入的内容却在指针的前面,因此未能被打印出来。
解决方法:可以在写入文件后增加一条代码fo.seek(0)将文件操作指针返回到文件开始,即可显示写入的内容。

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库是一个具有强大图像处理能力的第三方库,不仅包含了丰富的像素,色彩操作功能,还可以用于图像归档和批量处理。
PIL库支持图像存储、显示和处理,他能够处理几乎所有的图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条图像和文字等操作。
PIL库主要实现图像归档和图像处理两方面功能需求。

  • 图像归档
    对图像进行批处理、生成图像预览、图像格式转换等
  • 图像处理
    图像基本处理、像素处理、颜色
    处理等。
PIL库的image类解析

image是PIL最重要的类,它代表一张图片,引入这个类的方法是
from PIL import Image

  • Image类的图像读取和创建方法(共5个)



    通过image打开图像文件时,图像的栅格数据不会被直接解码或者加载,程序只是读取了图像文件头部的元数据信息,这部分信息标识了图像格式、颜色、大小等。


  • Image类的常用属性(共4个)




    Image还能读取序列类图像文件,包括gif,fli,flc,tiff等格式文件。open()方法打开一个图像时自动加载到序列的第一帧,使用seek()和tell()方法可以在不同帧之间移动。

  • Image类的序列图像操作方法(共2个)
    Image.seek(frame)跳转并返回图像中的指定帧
    Image.tell() 返回当前帧的序号
GIF文件图像的提取

对一个gif格式的动态文件,提取其中各帧图像,并保存为文件。

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("处理结束")
  • image类的图像转换和保存方法(共3个)



    PIL库还提供了格式转换功能




    生成缩略图
  • Image类可以缩放和旋转图像



    retate()方法是以逆时针旋转的角度值作为参数来旋转图像。

  • image类的图像像素和通道处理方法(共4个)


图像的颜色交换

交换图像中的颜色。可以通过分离RGB图片中的3个颜色通道实现颜色交换。

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")

原图



交换后



操作图像的每个像素点需要通过函数实现,可以采用lamba函数和point()方法。


PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法。

  • ImageFilter类的预定义过滤方法(共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类提供了更高级的图像增强功能,如调节色彩、亮度、对比度、锐化等

  • ImageEnhance类的图像增强和滤镜方法(共5个)


图像的对比度增强

增强图像的对比度为初始的20倍。

from PIL import Image
from PIL import ImageEnhance
im=Image.open('F:\\python\\第七章\\birdnest.jpg')
om=ImageEnhance.Contrast(im) #调整图像的对比度
om.enhance(20).save('F:\\python\\第七章\\bird1.jpg')

一二维数据的格式化和处理

一二维数据的表示和书写,CSV文件的每一行是数据,可以使用python中的列表类型表示,整个CSV文件是一个二维数据,由表示每一行的列表类型作为元素,组成一个二维列表。

导入CSV格式数据到列表
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格式转换为HTML展示的实例
将CSV文件转化为HTML文件需要三个步骤:
1、 读入CSV文件,获得文件数据
2、对数据进行格式化处理和转换
3、输出HTML格式的文件

seg1='''
<!DOCTYPE HTML>\n<html>\n<body>\n<meta charset=gb2312>
<h2 align=center>2016年7月部分大中城市新建住宅价格指数</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标准库
import json

  • json库的操作类函数(共四个)


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容