Python:文件操作、with语句、目录操作

2年前 (2022) 程序员胖胖胖虎阿
278 0 0

编码格式

  • Python的解释器使用的编码格式是Unicode(内存)
  • .py文件在磁盘上使用UTF-8存储(外存)

UTF-8Unicode的实现。
不同编码格式,文件占用空间不同。

文件读写的原理

  • 文件的读写俗称"IO操作"(input-output)
  • 文件读写操作的流程
graph TD
    A[Python操作文件] --> B(打开/新建文件)
    B --> C(读/写文件)
    C --> D[关闭资源]  

文件的读取操作

内置函数open()创建文件对象
语法规则:
file = open(filename [, mode, encoding])

file:被创建的文件对象
open:创建文件对象的函数
filename:创建/打开的文件名称
mode:打开文件的模式,默认为只读
encoding:编码格式;默认文本文件中字符的编码格式为gbk

示例:

  1. 创建test.txt文件,文件编码格式为GBK
  2. 创建demo.py文件,写入代码并运行

    file = open('test.txt', 'r')  # r表示只读
    print(file.readlines())  # ['明月几时有\n', '把酒问青天'];返回列表
    file.close()

常见的文件类型

按照文件中数据的组织形式,文件分为两大类:

  • 文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可用记事本打开
  • 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专门的软件,例如:mp3音频文件、jpg图片、doc文档等。

常见的文件打开模式

打开模式 描述
r 只读模式;文件指针放在文件开头
w 只写模式;文件不存在则创建;文件存在则覆盖原有内容;文件指针放在文件开头
a 追加模式;文件不存在则创建,文件指针放在文件开头;文件存在则在文件末尾追加内容,文件指针放在原文件末尾
b 二进制方式;不能单独使用,需要与其他模式一起使用,rb或wb
+ 读写方式;不能单独使用,需要与其他模式一起使用,a+

代码示例(复制图片文件):

src_img = open('lbx.png', 'rb')
target_img = open('lbx_copy.png', 'wb')

target_img.write(src_img.read())

target_img.close()
src_img.close()

文件对象的常用方法

方法 说明
read([size]) 从文件中读取size个字节或字符的内容返回。若省略size,则读取到文件的末尾,返回全部文件内容
readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,将这些对象放入列表返回
write(str) 将字符串str内容写入文件
writelines(str_list) 将字符串列表str_list内容写入文件,不添加换行符
seek(offset[, whence]) 把文件指针移动到新位置,offset表示相对于whence的位置;offset为正往结束方向移动,为负则往开始方向移动。
whence不同值有不同的含义:
0:从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件尾开始计算
tell() 返回文件指针当前的位置
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区的内容写入文件,之后关闭文件,释放文件对象相关资源

with语句

自动管理上下文资源,不管什么原因跳出with代码块,都能确保文件正确的关闭,以达到释放资源的目的。省去手动关闭的过程。异常发生时也能自动关闭资源。

当一个类能够实现(enter和exit)功能的时,称这个类符合(上下文管理)协议,并且称这个类的实例对象为(上下文管理器)

with open('test.txt', 'r') as file:
    print(file.readlines())  # ['明月几时有\n', '把酒问青天']

目录操作

os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块的语句执行结果通常与操作系统相关,在不同操作系统运行,得到的结果可能不一样。
os模块与os.path模块用于对文件、目录进行操作。

import os
os.system('calc.exe')  # 调用系统程序
os.startfile('D:\Program Files (x86)\Tencent\WeChat\WeChat.exe')  # 调用可执行文件

os模块操作目录的相关函数

函数 说明
getcwd() 返回当前工作目录
listdir(path) 返回指定路径下的文件和目录信息
mkdir(path[,mode]) 创建目录
makedirs(path1/path2...[,mode]) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2...) 删除多级目录
chdir(path) 将path设置为当前工作目录

os.path模块操作目录的相关函数

函数 说明
abspath(path) 获取文件或目录的绝对路径
exists(path) 判断文件或目录是否存在,返回True/False
join(path,name) 将目录与目录或文件名拼接起来
splitext() 分离文件名和扩展名
basename(path) 从一个路径中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdir(path) 用于判断path是否为路径

Python中关于路径的知识:

我们常用 / 来表示相对路径,\ 来表示绝对路径,例如:/data/bbb.txt表示相对路径;D:\user\ccc.txt则表示绝对路径。
注:网页网址和linux、unix系统下一般都用 /
我们经常见到形如./path../path的路径,其中的一个 . 表示当前所处的文件夹的绝对路径;.. 表示当前所处的文件夹上一级文件夹的绝对路径。

示例:打印出当前目录下的所有Python文件

import os

path = os.getcwd()
lst = os.listdir(path)

for fileName in lst:
    if fileName.endswith('.py'):
        print(fileName)

示例:遍历指定目录下所有文件

import os

path = os.getcwd()
lst = os.walk(path)

for dirpath, dirname, filename in lst:
    print(dirname, dirpath, filename)
    print('--------------')
    # 遍历所有文件夹
    for dirItem in dirname:
        print(os.path.join(dirpath, dirItem))
    # 遍历所有文件
    for file in filename:
        print(os.path.join(dirpath, file))
    print('--------------')

运行结果:

['sub1'] D:\study\python-study\chap11 ['file_read_demo.py', 'lbx.png', 'lbx_copy.png', 'test.txt', '__init__.py']
--------------
D:\study\python-study\chap11\sub1
D:\study\python-study\chap11\file_read_demo.py
D:\study\python-study\chap11\lbx.png
D:\study\python-study\chap11\lbx_copy.png
D:\study\python-study\chap11\test.txt
D:\study\python-study\chap11\__init__.py
--------------
[] D:\study\python-study\chap11\sub1 ['__init__.py']
--------------
D:\study\python-study\chap11\sub1\__init__.py
--------------
版权声明:程序员胖胖胖虎阿 发表于 2022年10月25日 上午11:16。
转载请注明:Python:文件操作、with语句、目录操作 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...