Python的文件操作

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

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))
相关文章
|
3月前
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
53 2
|
4月前
|
开发者 Python
Python基础第七篇(Python的文件操作)
Python基础第七篇(Python的文件操作)
|
27天前
|
存储 Python
Python文件操作
Python文件操作
|
28天前
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
31 1
|
4月前
|
存储 安全 开发者
文件操作?Python让你轻松搞定!
【6月更文挑战第12天】Python编程中的文件操作至关重要,涉及数据存储和系统交互。通过内置的`open()`函数,开发者可轻松处理文件。以只读模式`'r'`为例,使用`with`语句打开并读取文件内容;写入文件则用`'w'`或`'a'`模式。文件对象还支持高级功能,如文件指针移动,允许随机访问。掌握这些技能能提升开发效率。
31 0
|
17天前
|
Java 程序员 Python
【Python】文件操作
【Python】文件操作
17 0
|
1月前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
43 6
|
2月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
26 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
2月前
|
安全 Python
python文件操作详解
整个文件操作过程中,我们应始终保持代码的健壮性和清晰性,确保在出现错误时资源能够被正确释放。
42 1
|
2月前
|
安全 Python
Python文件操作全面指南
【8月更文挑战第4天】Python是一种强大的编程语言,支持丰富的文件操作功能。本文全面介绍了Python文件操作,包括读取、写入、追加及关闭文件等基本操作,并演示了如何处理异常以增强程序的健壮性。此外,还深入探讨了使用`os`和`shutil`模块进行高级文件与目录管理的方法,以及如何运用上下文管理器自动管理文件资源,为读者提供了实用的代码示例和最佳实践。
56 5