• python面向对象(十一、文件操作)


    13文件操作
    13.1 文件的概念
    13.1.1 文件的概念和作用
    计算机的文件,就是存储在某种长期储存设备上的一段数据
    长期存储设备包括:硬盘、U 盘、移动硬盘、光盘...
    文件的作用:将数据长期保存下来,在需要的时候使用
    13.1.2 文件的存储方式
    在计算机中,文件是以二进制的方式保存在磁盘上的
    文本文件和二进制文件:
    1)文本文件
    可以使用 文本编辑软件 查看
    本质上还是二进制文件
    例如:python 的源程序
    2)二进制文件
    保存的内容不是给人直接阅读的,而是提供给其他软件使用的
    例如:图片文件、音频文件、视频文件等等
    二进制文件不能使用文本编辑软件查看

    13.2 文件的基本操作
    13.2.1 操作文件的套路
    在计算机中要操作文件的套路非常固定,一共包含三个步骤:
    1)打开文件
    2)读、写文件
    读:将文件内容读入内存
    写:将内存内容写入文件
    3)关闭文件

    13.2.2 操作文件的函数/方法
    在Python中要操作文件需要记住1个函数和3个方法:

    open函数负责打开文件,并且返回文件对象
    read/write/close三个方法都需要通过文件对象来调用

    13.2.3 打开文件的方式
    open函数默认以只读方式打开文件,并且返回文件对象
    语法如下:
    python f = open("文件名", "访问方式")

    注:不同模式可以组合使用,例如:“wb”、“rb”、“w+”、“r+”等
    提示:频繁的移动文件指针,会影响文件的读写效率,开发中更多的时候会以只读(r)、只写(w、a)的方式来操作文件。
    写入文件示例:

    13.2.4 读取文件read方法
    1)open函数的第一个参数是要打开的文件名(文件名区分大小写)
    如果文件存在,返回文件操作对象
    如果文件不存在,会抛出异常
    2)read方法可以一次性读入并返回文件的所有内容
    3)close方法负责关闭文件
    如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问
    注意:read方法执行后,会把文件指针移动到文件的末尾

    13.2.4.1. 读取文件read
    read(n):读取n个字符。n不填时,默认读取所有内容,

    13.2.4.2. 单行读取readline


    读取大文件的正确姿势

    13.2.4.3. 迭代遍历

    13.2.4.4. 多行读取readline(很少使用)

    提示:在开发中,通常会先编写打开和关闭的代码,再编写中间针对文件的读/写操作!防止忘记关闭文件

    13.2.4.5. 文件指针(知道)
    文件指针标记从哪个位置开始读取数据
    第一次打开文件时,通常文件指针会指向文件的开始位置。当执行了read方法后,默认情况下文件指针会移动到读取内容的末尾。
    思考
    如果执行了一次read方法,读取了所有内容,那么再次调用read方法,还能够获得到内容吗?
    答案:不能
    第一次读取之后,文件指针移动到了文件末尾,再次调用不会读取到任何的内容

    13.2.4.6. 练习:将文件内容保存到列表
    要求:将每种水果的作为一个字典,添加到列表中
    文件内容:

    代码:
    表格内容增加或水果种类增加,程序都有很好的兼容性

    执行结果:

    修改水果文件,增加行和列:

    依旧可以正常输出:

    13.2.5 写文件write方法
    13.2.5.1. w只写模式
    使用w(只写)模式打开文件。如果文件存在,会被覆盖。如果文件不存在,创建新文件
    1)新建文件

    2)写入文件

    13.2.5.2. a追加模式
    使用a(追加)模式打开文件。如果该文件已经存在,文件指针定位到文件结尾,如果文件不存在,创建新文件
    程序运行2遍后,写入效果:

    13.2.6 b二进制模式打开文件
    需求将c盘的图片,复制到d盘

    13.2.7 “+”扩展操作(了解)

    通常在开发中更多的时候会以只读(r)、只写(w、a)的方式来操作文件。

    13.2.8 文件读写案例—复制文件
    目标:用代码的方式,来实现文件复制过程
    1)小文件复制
    打开一个已有文件,读取完整内容,并写入到另外一个文件

    2)大文件复制
    打开一个已有文件,逐行读取内容,并顺序写入到另外一个文件

    13.2.9 文件读写案例—修改文件
    需求:将文件中的“一”,替换为“壹”
    文件:

    代码:

    执行结果:

    13.2.10 with语句:自动关闭文件
    进入with语句时,执行打开文件。离开with语句时,执行关闭文件。

    使用with语句,就不用close关闭文件了。

    13.3 文件/目录操作 os
    在终端/文件浏览器、中可以执行常规的文件/目录管理操作,例如:
    创建、重命名、删除、改变路径、查看目录内容、……
    在Python中,如果希望通过程序实现上述功能,需要导入os模块

    13.3.1 文件操作

    13.3.2 目录操作


    提示:文件或者目录操作都支持相对路径和绝对路径

    13.4 文本文件的编码格式(科普)
    文本文件存储的内容是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等
    Python 2.x默认使用ASCII编码格式
    Python 3.x默认使用UTF-8编码格式

    13.4.1 ASCII编码和UNICODE编码
    1)ASCII编码
    计算机中只有128个ASCII字符,共用7个bit,为了便于存储,使用1byte(8bit),第一位用0补齐。所有编码都兼容ASCII码

    2)GBK国标码
    16bit 2byte 中文
    3)Unicode万国码
    32bit 4byte支持各国语言,但也最消耗空间
    Unicode是一本很厚的字典,她将全世界所有的字符定义在一个集合里。这么多的字符不是一次性定义的,而是分区定义。每个区可以存放65536个(216)字符,称为一个平面(plane)。目前,一共有17个(25)平面,也就是说,整个Unicode字符集的大小现在是2^21。
    4)UTF-8编码格式
    UTF-8是可变长度的UNICODE编码,最短长度8bit。为了节省空间,可以去掉UNICODE编码中最前面的若干个0。UTF-8适合网络传输和存储。
    英文utf-8:8bit 1byte和ascii一样
    欧洲utf-8:16bit 2byte
    中文utf-8:24bit 3byte
    5)ascii编码与字母相互转换ord、chr。参考:字符串ord和chr

    13.4.2 Python 2.x中如何使用中文
    Python 2.x 默认使用ASCII编码格式,Python 3.x默认使用UTF-8编码格式
    在Python 2.x文件的第一行增加以下代码,解释器会以utf-8编码来处理python文件

    - coding:utf8 -

    这方式是官方推荐使用的!

    也可以使用:

    coding=utf8

    unicode字符串
    在Python 2.x中,即使指定了文件使用UTF-8的编码格式,但是在遍历字符串时,仍然会以字节为单位遍历字符串
    要能够正确的遍历字符串,在定义字符串时,需要在字符串的引号前,增加一个小写字母u,告诉解释器这是一个unicode字符串(使用UTF-8编码格式的字符串)

    在字符串前,增加一个u表示这个字符串是一个utf8字符串

    13.4.3 编码和解码
    1)编码encode
    输出结果是字节(byte),utf-8中使用三个字节表示一个汉字,表示“胡辣汤”需要使用9个字节。

    2)解码decode
    输出结果是字符串

    注意:用什么编码方式编码,还用什么编码方式解码。否则会报错
    3)英文字母编码后不变
    utf-8是可变长度的unicode编码,英文字母使用utf-8编码后与ascii码一样,打印出来还是英文字母

    13.5 logging日志文件
    通过log的分析,可以方便用户了解系统或软件、应用的运行情况。可以及时发现问题并快速定位、解决问题,补救损失。
    1)单日志文件

    2)多日志文件:


    执行结果:l1.log和l2.log

    13.6 shutil文件和目录操作
    `import shutil

    拷贝文件
    shutil.copy2('原文件', '现文件')
    shutil.copy2('file', 'temp')

    拷贝目录
    shutil.copytree("原目录", "新目录", ignore=shutil.ignore_patterns("*.pyc"))
    shutil.copytree("/Users/jingliyang/PycharmProjects/面试题/常用模块/logging模块", "logging模块2", ignore=shutil.ignore_patterns("init.py"))

    删除目录
    shutil.rmtree("temp", ignore_errors=True)
    shutil.rmtree("logging模块2", ignore_errors=True)

    移动文件/目录
    shutil.move("logging模块", "logging2", copy_function=shutil.copy2)

    获取磁盘使用空间
    total, used, free = shutil.disk_usage(".")
    print("当前磁盘共: %iGB, 已使用: %iGB, 剩余: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))

    压缩文件
    shutil.make_archive('压缩文件夹的名字', 'zip','待压缩的文件夹路径')
    shutil.make_archive('logging2', 'zip','/Users/jingliyang/PycharmProjects/面试题/常用模块/随机数')

    解压文件
    shutil.unpack_archive('zip文件的路径.zip','解压到目的文件夹路径')
    shutil.unpack_archive('/Users/jingliyang/PycharmProjects/面试题/常用模块/shutil模块/logging2.zip','/Users/jingliyang/PycharmProjects/面试题/常用模块/shutil模块/tmp')`

  • 相关阅读:
    java学习--基础知识进阶第十四天--xml文件的概述与应用场景、xml文件的组成部分&如何编写xml、xml的两种解析方式的原理、Dom4J开源工具的使用
    java学习--基础知识进阶第十三天--笔记
    java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&BeanUtils的使用、自定义BeanUtils工具类
    java学习--基础知识进阶第十二天--笔记
    java学习--基础知识进阶第十二天--网络编程概述、UDP协议、TCP协议
    java学习--基础知识进阶第十一天--多线程概述、线程实现、多线程安全问题产生 & 解决方案
    杭电oj 1000
    建立消息映射和消息处理
    c程序设计语言 导言
    句柄数不停增加
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14078286.html
Copyright © 2020-2023  润新知