python 文件操作_os模块 & json模块 & pickle模块

文章目录

  • 文件操作
  • 01. 文件操作介绍
    • 文件的作用?
    • 文件的打开与关闭
    • 文件的打开
    • 文件的打开模式
  • 例:拷贝文件
  • 例:拷贝二进制文件(图片、音乐)如图片:
    • File对象的属性:
    • File对象的常用方法:
      • 打开文件操作
      • 例:
    • 文件的关闭
    • with语句工作原理(敲黑板**背过)
          • python中的with语句使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的(“清理”)操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。
    • 项目案例: 文件的备份
    • 项目案例: 文件的备份Demo
  • 02. os模块
    • 关于操作系统
    • 关于路径
    • os模块
    • 关于文件与目录操作
    • 例:文件批量重命名
        • 国内镜像:pip install -i https://pypi.douban.com/simple pillow
        • 例: 验证码生成器
        • 例:验证码图片生成器
  • 03 json模块详解
    • python类型数据和JSON数据格式互相转换规则
        • 编码
        • 解码
    • 序列化及反序列化常用参数
    • 自定义复杂数据类型编解码
  • 04 pickle模块
    • json和pickle模块的区别
    • 批量修改文件名

文件操作

01. 文件操作介绍

日常中的数据存储在纸上, 而计算机的数据存储在哪里呢?
—硬盘上

文件的作用?

默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放。
文件可以存储数据。

文件的打开与关闭

这个得分成三步,第一步打开冰箱;第二步,把大象塞进冰箱里;第三步,把冰箱关上。在操作文件的整体过程与将大象放入冰箱的过程是很相似的。
python 文件操作_os模块 & json模块 & pickle模块_第1张图片

文件的打开

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。

open(文件名,访问模式) e.g. f = open('test.txt', 'w')

如果文件不存在那么创建,如果存在那么就先清空,然后写入数据

文件的打开模式

python 文件操作_os模块 & json模块 & pickle模块_第2张图片

例:拷贝文件

python 文件操作_os模块 & json模块 & pickle模块_第3张图片
python 文件操作_os模块 & json模块 & pickle模块_第4张图片
运行:
python 文件操作_os模块 & json模块 & pickle模块_第5张图片
结果:
python 文件操作_os模块 & json模块 & pickle模块_第6张图片

例:拷贝二进制文件(图片、音乐)如图片:

要读取二进制文件,比如图片、视频等等,用’rb’, ‘wb’, 'ab’等模式打开文件即可.
python 文件操作_os模块 & json模块 & pickle模块_第7张图片
运行:
在这里插入图片描述
结果:
python 文件操作_os模块 & json模块 & pickle模块_第8张图片

File对象的属性:

python 文件操作_os模块 & json模块 & pickle模块_第9张图片
python 文件操作_os模块 & json模块 & pickle模块_第10张图片

File对象的常用方法:

python 文件操作_os模块 & json模块 & pickle模块_第11张图片
seek(offset, from) 有2个参数: offset:偏移量 from:方向
0:表示文件开头;
1:表示当前位置;
2:表示文件末尾 (不常用)
1). 把位置设置为:从文件开头,偏移5个字节
2). 把位置设置为:文件最开始
3). 把位置设置为:文件最末尾
python 文件操作_os模块 & json模块 & pickle模块_第12张图片
在这里插入图片描述

打开文件操作

python 文件操作_os模块 & json模块 & pickle模块_第13张图片
python 文件操作_os模块 & json模块 & pickle模块_第14张图片

例:

python 文件操作_os模块 & json模块 & pickle模块_第15张图片
结果:
python 文件操作_os模块 & json模块 & pickle模块_第16张图片

文件的关闭

方法一: 调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,
并且操作系统同一时间能打开的文件数量也是有限的。

方法二: Python引入了with语句来自动帮我们调用close()方法。
python 文件操作_os模块 & json模块 & pickle模块_第17张图片

with语句工作原理(敲黑板**背过)

python中的with语句使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的(“清理”)操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。

python 文件操作_os模块 & json模块 & pickle模块_第18张图片

项目案例: 文件的备份

输入文件的名字,然后程序自动完成对文件进行备份。

项目案例: 文件的备份Demo

python 文件操作_os模块 & json模块 & pickle模块_第19张图片

02. os模块

关于操作系统

os,语义为操作系统,处理操作系统相关的功能,可跨平台。 比如 显示当前目录下所有文件 / 删除某个文件 /获取文件大小…
python 文件操作_os模块 & json模块 & pickle模块_第20张图片
例如:
python 文件操作_os模块 & json模块 & pickle模块_第21张图片
python 文件操作_os模块 & json模块 & pickle模块_第22张图片
python 文件操作_os模块 & json模块 & pickle模块_第23张图片

关于路径

python 文件操作_os模块 & json模块 & pickle模块_第24张图片
例如:
python 文件操作_os模块 & json模块 & pickle模块_第25张图片
python 文件操作_os模块 & json模块 & pickle模块_第26张图片
python 文件操作_os模块 & json模块 & pickle模块_第27张图片
python 文件操作_os模块 & json模块 & pickle模块_第28张图片

os模块

• os模块中的rename()可以完成对文件的重命名操作。
rename(需要修改的文件名, 新的文件名)
• os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)

关于文件与目录操作

python 文件操作_os模块 & json模块 & pickle模块_第29张图片

例:文件批量重命名

  1. 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
  2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
国内镜像:pip install -i https://pypi.douban.com/simple pillow

码前提要:
python 文件操作_os模块 & json模块 & pickle模块_第30张图片
python 文件操作_os模块 & json模块 & pickle模块_第31张图片
代码如下:

例: 验证码生成器
def draw_code_image(str_code='A34G'):
    # 引入绘图模块, Image表示画布对象; ImageDraw表示画笔对象; ImageFont表示字体对象;
    from PIL import Image, ImageDraw, ImageFont
    # 定义变量,用于画面的背景色、宽、高
    # RGB:(255,0,0), (0, 255,0), (0, 0, 255)
    bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)
    width = 100
    height = 25
    # 创建画布对象
    im = Image.new('RGB', (width, height), bgcolor)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(100):
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)
    # 构造字体对象
    font = ImageFont.truetype('/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc',
                              23)
    # 构造字体颜色
    fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
    for index, item in enumerate(str_code):
        # print(5 +index*20))  # (5,2)  (25, 2), (45,2)
        draw.text((5 + (index * 20), 2), item, font=font, fill=fontcolor)
    return im

"""

import random


def generate_str_code(length=4):
    """随机生成验证码"""
    import string
    strings = string.ascii_letters + string.digits
    return "".join(random.sample(strings, length))



def draw_code_image(str_code):
    """根据给丁的字符串验证码绘制验证码图片"""
    # 引入绘图模块, Image表示画布对象; ImageDraw表示画笔对象; ImageFont表示字体对象;
    from PIL import Image, ImageDraw, ImageFont
    # 定义变量,用于画面的背景色、宽、高
    # RGB:(255,0,0), (0, 255,0), (0, 0, 255)
    width = 100
    height = 25
    white_color = (255, 255, 255)
    black_color = (0, 0, 0, 0)
    green_color = (0, 255, 0)
    # 创建画布对象
    im = Image.new('RGB', (width, height), white_color)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(100):
        xy = (random.randrange(0, width), random.randrange(0, height))
        draw.point(xy, fill=green_color)
    # 构造字体对象 shell命令: fc-list :lang=zh
    font = ImageFont.truetype('doc/wqy-zenhei.ttc', 23)
    for index, item in enumerate(str_code):
        # print(5 +index*20))  # (5,2)  (25, 2), (45,2)
        draw.text((5 + (index * 20), 2), item, font=font, fill=black_color)
    return im

if __name__ == '__main__':
    str_code = generate_str_code()
    # 返回的图片对象
    im = draw_code_image(str_code)
    im.save('hello.png')

结果:
python 文件操作_os模块 & json模块 & pickle模块_第32张图片

例:验证码图片生成器
"""
项目需求: 批量验证码图片生成器
    1). 可生成数字、大写、小写字母及三者混合类型的验证码
    2). 支持自定义验证码字符数量
    3). 支持自动调整验证码图片的大小
    4). 支持自定义干扰点的数量
    5). 支持自定义验证码图文颜色
"""
import os
import random

white_color = (255, 255, 255)
black_color = (0, 0, 0, 0)
green_color = (0, 255, 0)


def generate_str_code(length=4):
    """随机生成验证码"""
    import string
    strings = string.ascii_letters + string.digits
    return "".join(random.sample(strings, length))


def draw_code_image(str_code, item_width=25, height=25, point_count=100,
                    bg_color=black_color, font_color=white_color):
    """
    根据给定的字符串验证码绘制验证码图片
    :param str_code:
    :param item_width:
    :param height:
    :param point_count:
    :param bg_color:
    :param font_color:
    :return:
    """
    # 引入绘图模块, Image表示画布对象; ImageDraw表示画笔对象; ImageFont表示字体对象;
    from PIL import Image, ImageDraw, ImageFont
    # 定义变量,用于画面的背景色、宽、高
    # RGB:(255,0,0), (0, 255,0), (0, 0, 255)
    # 根据验证码的长度自动调整画布的宽度
    width = len(str_code) * item_width
    # 创建画布对象
    im = Image.new('RGB', (width, height), bg_color)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(point_count):
        xy = (random.randrange(0, width), random.randrange(0, height))
        draw.point(xy, fill=green_color)
    # 构造字体对象 shell命令: fc-list :lang=zh
    font = ImageFont.truetype('doc/wqy-zenhei.ttc', 23)
    for index, item in enumerate(str_code):
        # print(5 +index*25))  # (5,2)  (25, 2), (45,2)
        draw.text((5 + (index * 25), 0), item, font=font, fill=font_color)
    return im


if __name__ == '__main__':
    from tqdm import  tqdm
    verifyCodeCount = 100
    dirname = 'vCode'
    for count in tqdm(range(verifyCodeCount)):
        # He3x ===== He3x.png
        str_code = generate_str_code(length=10)
        # 返回的图片对象
        im = draw_code_image(str_code)
        # 生成图片文件的绝对路径
        filename = os.path.join(dirname, str_code + random.choice(['.png', '.jpg']))
        im.save(filename)

    print("生成图片验证码成功")
# 作业: 将验证码目录中所有的.jpg图片转换格式未.png的图片.
#  考察: os模块的使用、PIL库

结果:100条验证码
python 文件操作_os模块 & json模块 & pickle模块_第33张图片
python 文件操作_os模块 & json模块 & pickle模块_第34张图片

03 json模块详解

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。

这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

xml:
python 文件操作_os模块 & json模块 & pickle模块_第35张图片
json:
python 文件操作_os模块 & json模块 & pickle模块_第36张图片

python类型数据和JSON数据格式互相转换规则

python 中str类型到JSON中转为unicode类型,None转为null,dict对应object;
pyhton中的集合不能转成json格式。
python 文件操作_os模块 & json模块 & pickle模块_第37张图片
python 文件操作_os模块 & json模块 & pickle模块_第38张图片

编码

python 文件操作_os模块 & json模块 & pickle模块_第39张图片
python 文件操作_os模块 & json模块 & pickle模块_第40张图片

解码

python 文件操作_os模块 & json模块 & pickle模块_第41张图片

序列化及反序列化常用参数

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding="utf-8", default=None, sort_keys=False, **kw)
• ensure_ascii=False:  中文存储需要设定
• indent=4:  增加缩进,增强可读性,但缩进空格会使数据变大
• separators=(',',':'):  自定义分隔符,元素间分隔符为逗号, 字典key和value值的分隔符为冒号
• sort_keys=True:  字典排序

自定义复杂数据类型编解码

例如我们碰到集合对象, datetime对象,或者自定义的类对象等json默认不支持的数据类型时,我们就需
要自定义编解码函数。有两种方法来实现自定义编解码。
python 文件操作_os模块 & json模块 & pickle模块_第42张图片
python 文件操作_os模块 & json模块 & pickle模块_第43张图片

04 pickle模块

python的pickle模块实现了python的所有数据序列和反序列化。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。cPickle是pickle模块的C语言编译版本相对速度更快。

json和pickle模块的区别

1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。

2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象
网络传输,但不同版本的Python序列化可能还有差异。
python 文件操作_os模块 & json模块 & pickle模块_第44张图片

批量修改文件名

python 文件操作_os模块 & json模块 & pickle模块_第45张图片

你可能感兴趣的:(python 文件操作_os模块 & json模块 & pickle模块)