Python的文件操作

183 阅读11分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

🤵‍♂️ 个人主页: @Flyme awei 个主页 👨‍💻 作者简介:Python领域新星创作者。 🐋 希望大家多多支持😘一起进步呀! 📝 如果文章对你有帮助的话,欢迎评论💬点赞👍收藏📂加关注

在这里插入图片描述

前言

  今天是《CSDN21天学习挑战赛》的第19天   上一节学习了Python中的包和模块   今天将学习Python的文件操作

活动地址:CSDN21天学习挑战赛

@TOC

Python文件操作

一、编码格式介绍

常见的字符编码格式

Python解释器使用的是Unicode(内存) Unicode 定长编码:2个字节表示一个字符

.py文件放在磁盘上使用UTF—8储存(外存) UTF-8 变长编码:UTF-8Unicode的实现,1-4个字节表示一个字符,英文1个字节,汉字3个字节。

新建demo1.py文件

# -*- coding: utf-8 -*-
# @File  : demo1.py
# @author: Flyme awei 
# @email : Flymeawei@163.com
# @Time  : 2022/8/17 10:45

print("Hello World")

记事本打开: 在这里插入图片描述

# 不同的编码格式决定了占用磁盘空间的大小
# coding:UTF-8  # 中文编码注释
# encoding=gbk  # 编码格式

二、文件读写原理

1.文件的读写简称IO操作

输入input,输出output 在这里插入图片描述

2.文件读写流程

在这里插入图片描述

3.操作原理:

文件操作原理

  1. python操作文件
  2. 打开或新建文件open
  3. 读,写文件read、write
  4. 关闭资源file.close()

三、文件读写操作

1.内置函数open()创建文件对象

通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步

2.语法规则

file = open(filename, mode='r', buffering=None, encoding=None"""
file  -->被创建的文件对象
open  -->创建文件对象的函数             
filename  -->要创建或打开的文件名称
mode  -->打开模式默认为只读
encoding  -->字符编码格式        
"""

代码演示: a.txt文件 在这里插入图片描述

3.文件读写操作.py文件

# -*- coding: utf-8 -*-
# @File  : 3.文件读写操作.py
# @author: Flyme awei 
# @email : Flymeawei@163.com
# @Time  : 2022/8/17 10:45

file = open('a.txt', 'r')  # r 以只读模式打开文件,文件的指针将会放在文件的开头
print(file.readlines())  # 返回值为一个列表
file.close()

在这里插入图片描述

四、文件的打开开和关闭

1.文件的状态和操作过程

在这里插入图片描述

2. 文件的打开模式

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

1.文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开

2.二进制文件:把数据内容以字节进行存储,无法用记事本打开,必须使用专用的文软件打开,举例:MP3音频文件 JPG图片 .doc文档等

常用 的文件打开模式

打开模式描述
r以只读模式打开文件,文件的指针将会放在文件的开头
w以只写方式打开文件,如果文件不存在就创建,如果文件存在则覆盖原有内容,文件指针放在开头
a以追加模式打开文件,如果文件不存在则创建,文件指针在开头,如果文件存在,则在文件末尾追加内容,文件指针在原文末尾
b以二进制方式打开文件,不能单独使用,需要与其它模式一起使用:rb或者wb
+以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+
'''
打开模式                        描述
---------------------------------------------------------------------------------------------------
 r          以只读模式打开文件,文件的指针将会放在文件的开头

 w          以只写方式打开文件,如果文件不存在就创建,如果文件存在则覆盖原有内容,文件指针放在开头

 a          以追加模式打开文件,如果文件不存在则创建,文件指针在开头,如果文件存在,则在文件末尾追加内容,文件指针在原文末尾

 b          以二进制方式打开文件,不能单独使用,需要与其它模式一起使用,rb,或者wb

 +          以读写方式打开文件,不能单独使用,需要与其它模式一起使用
'''

代码演示:

file = open('a.txt', 'r')  # 只读
print(file.readlines())
file.close()

file = open('b.txt', 'w')  # 只写
file.write('hello.python')
file.close()

file = open('c.txt', 'a')  # 追加
file.write('你好啊')
file.close()

file1 = open('logo.png', 'rb')  # 以二进制读
file2 = open('copy_logo.png', 'wb')  # 以二进制写
a = file1.read()
file2.write(a)  # 边读边写
file1.close()
file2.close()

file = open('c.txt', 'a+')  # 以读写方式打开
file.write('java')
file.close()

在这里插入图片描述

a.txt文件 在这里插入图片描述

b.txt文件 在这里插入图片描述

c.txt文件 在这里插入图片描述 logo.png文件 在这里插入图片描述 copy_logo.png文件 在这里插入图片描述

3.文件的关闭

file.close()

五、文件对象的常用方法

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

2.readline()                 从文本中读取一行内容

3.readlines()                把文本文件中每一行都作为独立的字符串对象,并将这些对象放回列表返回

4.write(str)                 将字符串内容写进文件

5.writelines(s_list)         将字符串列表s_list写入文本文件,不添加换行符

6.seek(offset, whence)      把文件指针移到新的位置,offset表示相对whence的位置:
                             offset:为正往结束方向移动,
                             whence不同的值呆鸟不同的含义:
                             0:从文件开头开始计算 
                             1:从文件当前位置开始计算
                             2:从文件结尾开始计算

7.tell()                     返回文件指针当前位置

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

9.close()                    把缓冲区内容写入文件,同事关闭文件,释放文件对象资源
"""

六、with上下文管理

with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正常关闭,以此来达到释放资源的目的

语句:

with open('logo.png', 'rb') as src_file: 
# open('logo.png', 'rb')称为上下文表达式
    src_file.read()  (with语句体)"""
with open('logo.png', 'rb') as src_file:
    print(src_file.read())  
    # 不用写 file.close

  open('logo.png', 'rb')称为上下文表达式,同时创建一个运行时上下文,自动调用__enter__方法,并将返回值赋给src_file, 实现了特殊方法__enter__(), __exit__(),遵守了上下文管理协议,这句表达式的对象就是上下文管理器,离开运行时上下文,自动调用上下文管理器的特殊方法

# MyContentMgr实现了特殊方法__enter__(), __exit__(),称为该类对象遵守了上下文管理器协议
# 该类对象的实例对象 MyContentMgr() 被称为上下文管理器
# 类对象MyContentMgr的实例对象 MyContentMgr() 被称为上下文管理器

class MyContentMgr(object):
    def __enter__(self):
        print('enter方法被调用执行了')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit方法被调用执行了')
        return self

    def show(self):
        print('show方法被调用执行了')


with MyContentMgr() as file:  # 相当于file = MyContentMgr()
    file.show()

在这里插入图片描述

with语句复制文件:

# with语句 上下文管理器
with open('logo.png', 'rb') as src_file:
    with open('copy2logo.png', 'wb') as target_file:
        target_file.write(src_file.read())
# 不需要手动写关闭文件过程

七、os模块

1.OS模块是python内置的与操作系统功能文件系统相关的模块,该模块中的语句执行结果通常与操作系统有关,在不同操作系统上运行,得到的结果可能不一样.

2.os模块于os.path模块用于对目录或文件进行操作

# 目录操作
# os 与操作系统相关的一个模块

import os

# os.system('notepad.exe')  # 打开记事本
# os.system('calc.exe')  # 打开计算器

# 直接打开可执行文件
os.startfile('C:\\Program Files\\Microsoft Office\\root\\Office16\\excel.exe')  # 打开 Excel程序

打开记事本: os.system('notepad.exe')

打开计算器: os.system('calc.exe')

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

os 模块操作目录相关函数

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

2.listdir(path)                             返回指定路径下的文件和目录信息

3.mkdir(path[,mode])                        创建目录

4.makedirs(path1/path2/...[,mode])          创建多级目录

5.rmdir(path)                               删除目录

6.removedirs(path1/path2...)                删除多级目录

7.chdir(path)                               将path设置为当前工作目录
"""

代码实现:

import os  # 导入与操作系统和文件系统相关的模块
print(os.getcwd())  # 返回当前目录

print(os.listdir('../chap15 文件'))  # 返回指定路径下的文件和目录信息

# os.mkdir('new dir')  # 创建目录

# os.makedirs('A/B/C')  # 创建多级内目录

# os.rmdir('new dir')  # 删除目录

# os.removedirs('A/B/C')  # 移除多级目录

os.chdir('/Python基础语法\\chap14 模块')  # 将path设置为当前工作目录
print(os.getcwd())  # 返回当前工作目录

在这里插入图片描述

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

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

函数说明
abspath(path)用于获取文件目录的绝对路径
exists(path)用于判断文件或目录是否存在,如果存在返回True,否则返回False
join(path,name)将目录与目录或者文件名拼接起来
splitext()分离文件名和拓展名
basename(path)从一个目录中提取文件名
dirname(path)从一个目录中提取文件名
isdir(path)用于判断是否为路径
# os.path 模块操作目录相关函数
"""
函数                                  说明
----------------------------------------------------------------------
1.abspath(path)                 用于获取文件目录的绝对路径

2.exists(path)                  用于判断文件或目录是否存在,如果存在返回True,否则返回False

3.join(path,name)               将目录与目录或者文件名拼接起来

4.splitext()                    分离文件名和拓展名

5.basename(path)                从一个目录中提取文件名

6.dirname(path)                 从一个路径中提取文件路径,不包括文件名

7.isdir(path)                   用于判断是否为路径
"""

代码实现:

import os.path
print(os.path.abspath('demo2.py'))  # 获取绝对路径

print(os.path.exists('demo2.py'))  # 用于判断文件或目录是否存在,如果存在返回True,否则返回False

print(os.path.join('E:\\python', 'demo13.py'))  # 将目录与目录或者文件名拼接起来

print(os.path.split('/Python基础语法\\chap15 文件'))  # 将目录与文件进行拆分
print(os.path.splitext('demo2.py'))  # 分开文件和拓展名

print(os.path.basename('/Python基础语法\\chap15 文件'))

print(os.path.dirname('/Python基础语法\\chap15 文件'))

print(os.path.isdir('/Python基础语法\\chap15 文件'))

在这里插入图片描述

3.列出指定目录下的所有.py文件

代码实现:

# 列出指定目录下的所有.py文件
import os
path = os.getcwd()  # 返回当前工作目录
lst = os.listdir(path)  # 返回 path路径下的文件和目录信息
for filename in lst:
    if filename.endswith('.py'):  # 列出.py文件    endswith-->以什么结尾
        print(filename)

在这里插入图片描述

4.os.walk(path)遍历指定目录下所有的文件以及目录

代码实现:

import os

path = os.getcwd()
lst_files = os.walk(path)  # 遍历指定目录下所有的文件以及目录
print(lst_files)  # 返回值为一个生成器对象
for dir_path, dir_name, file_name in lst_files:
    # print(dir_path)
    # print(dir_name)
    # print(file_name)
    # print('----------------')
    for dir_ in dir_name:
        print(os.path.join(dir_path, dir_))
    print('-----------------------------')
    for file in file_name:
        print(os.path.join(dir_path, file))

八、总结

1.编码格式

1.Python的解释器使用的是Unicode(内存)

2..py文件放在磁盘上使用UTF—8储存(外存)

2.文件操作

读:

read() readline() readlines()

写:

write() writelines()

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

3.目录操作

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)用于判断是否为路径