Python随记【三】

文件操作


打开文件

打开文件的方法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  • file参数:指定了被打开的文件名称

  • mode参数:指定了打开文件后的处理方式,默认为r读模式

  • buffering参数:指定了读写文件的缓存模式。0表示不缓存,1表示缓存,如大

    于1则表示缓冲区的大小。默认值是缓存模式

  • encoding参数:指定对文本进行编码和解码的方式,只适用于文本模式,可以使

    用Python支持的任何格式,如GBK、utf8、CP936等等。

open()函数返回1个文件对象,通过该文 件对象可以对文件进行读写操作。如果指定文件不存在、 访问权限不够、磁盘空间不足或其他原因导致创建文件对 象失败则抛出异常。

即使写了关闭文件的代码,也无法保证文件一定能 够正常关闭。例如,如果在打开文件之后和关闭文件之前 发生了错误导致程序崩溃,这时文件就无法正常关闭。在 管理文件对象时推荐使用with关键字

例如:

1
2
3
with open('data.txt', 'r') as f:
data = f.read()
print('context: {}'.format(data))

打开文件的方式

文件的常用属性

例如:

1
2
3
with open('test.txt') as f:
print(f.mode)
f.close()

输出为r

文件的常用方法

  • read([size]): 从文本文件中读取size个字符(Python 3.x)的内容作为结果返回,或从二进制文件

    中读取指定数量的字节并返回,如果省略size则表示读取所有内容

  • write(s) :把s的内容写入文件

  • writelines(s) :把字符串列表写入文本文件,不添加换行符

  • readline() :从文本文件中读取一行内容作为结果返回

  • readlines() :把文本文件中的每行文本作为一个字符串存入列表中,返回该列表,对于大文件会占 用较多内存,不建议使用

  • seek(offset[, whence]): 把文件指针移动到新的字节位置,offset表示相对于whence的位置。whence为0表示从 文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0

  • tell() :返回文件指针的当前位置

  • flush() :把缓冲区的内容写入文件,但不关闭文件

  • close():关闭文件

关于于seek()方法的是把 文件指针定位到文件中指定字节的位置,所以若为中文,则注意一个汉字两个字节

其他文件操作查看:Python文件

文件级操作

Python的多种文件模块

  • 如果需要处理文件路径,可以使用os.path模块中的对象和 方法;
  • 如果需要使用命令行读取文件内容可以使用fileinput模块;
  • 创建临时文件和文件夹可以使用tempfile模块;

OS模块常用方法

os.path模块常用方法

shutil模块常用方法

os模块目录操作

Python对图像文件的处理

安装Pillow库

import PIL #引入PIL中的所有类

from PIL import Image #单独引入Image类

PIL库的Image类常用方法

Image类的打开或创建图片

方法描述
Image.open(filename)根据参数加载图像文件
Image.new(mode,size,color)根据给定参数创建一个新图像
Image.open(StringIO.StringIO(buffer))从字符串中获取图像
Image.frombytes(mode,size,data)根据像素点data创建图像
Image.verify()对图像文件完整性进行检查,返回异常

Image类的4个处理图片的常用属性

属性描述
Image.format标识图像格式和来源,如果图像不是从文件读取,值为None
Image.mode图像的色彩模式,”L”为灰度图像,“RGB”为真彩色图像,“CMYK”为出版图像
Image.size图像的宽度和高度,单位为像素(px),返回值为二元元组
Image.pallette调色板属性,返回一个ImagePallete类型

Image还能读取序列图像,包括GIF、FLI、FLC、TIFF等格式,open()方法打开时自动加载序列中的第一帧,使用seek()和tell()方法可以在不同帧之间移动

Image类的图像转换和保存方法

方法描述
Image.save(filename,format)将图像保存为名为filename的文件,format是图片格式
Image.convert(mode)使用不同的参数,转换图像为新的模式
Image.thumbnail(size)创建图像的缩略图,size是缩略图尺寸的二元元组

Image类的图像旋转和缩放

方法描述
Image.resize(size)按size大小调整图像,生成副本
Image.rotate(angle)按angle角度逆时针旋转图像,生成副本

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

PIL的ImageFilter类提供了10种图像过滤方法

方法描述
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)

PIL的ImageEnhance类提供了5种图像增强和滤镜方法

方法描述
ImageEnhance.enhance(factor)对选择属性的数值增强factor倍
ImageEnhance.Color(im)调整图像的颜色平衡
ImageEnhance.Contrast(im)调整图像的对比度
ImageEnhance.Brightness(im)调整图像的亮度
ImageEnhance.Sharpness(im)调整图像的锐度

NumPy库

参考:

官方中文文档

Numpy教程

CS231n课程笔记翻译:Python Numpy教程

数组Arrays

NumPy数组是通常的Python数组的扩展。NumPy数组配备了大量的函数和运算符,可以帮助我们快速编写上面讨论过的各种类型计算的高性能代码。

创建数组

常用属性

常用形态操作

切片和索引

切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以你必须为每个维度指定好切片。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np
a=np.random.rand(5,3)
print(a)
print(a[2])
print()
print(a[1:3])
print()
print(a[-5:-2:2])
print()
print(a[:3,:2])
#索引
print()
print(a[[0,1,2],[2,1,0]])
#数组中(0,2),(1,1)和(2,0)位置处的元素
#输出:
# [[0.44761556 0.81326569 0.79004551]
# [0.57454174 0.39755703 0.48081083]
# [0.68405094 0.74275781 0.90948634]
# [0.8489756 0.56085858 0.87524095]
# [0.14517911 0.79332683 0.67406689]]
# [0.68405094 0.74275781 0.90948634]
#
# [[0.57454174 0.39755703 0.48081083]
# [0.68405094 0.74275781 0.90948634]]
#
# [[0.44761556 0.81326569 0.79004551]
# [0.68405094 0.74275781 0.90948634]]
#
# [[0.44761556 0.81326569]
# [0.57454174 0.39755703]
# [0.68405094 0.74275781]]
#
# [0.79004551 0.39755703 0.68405094]

高级索引

numpy库的算术运算函数

numpy库的比较运算函数

图像和数据处理

图像和数组的转换

图像的数组表示和转换

1、将图像转换为数组:

im=Image.open(filename)

arr=np.array(im)

2、将数组存储为图像:

pil_im=Image.fromarray()

matplotlib库的使用

NumPy Matplotlib

matplotlib库是提供数据绘图功能的第三方库,其pyplot字库主要用于实现各种数据展示图形的绘制。

matplotlib画图可以总结为3个步骤:获取数据——画出基本图形——设置细节

使用汉字

Matplotlib 默认情况不支持中文,我们需要这样设置:

1
2
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif']='SimHei'

常用绘图函数

绘图区域函数

plt和pillow的结合使用

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~