携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
🤵♂️ 个人主页: @Flyme awei 个主页 👨💻 作者简介:
Python领域新星创作者。 🐋 希望大家多多支持😘一起进步呀! 📝 如果文章对你有帮助的话,欢迎评论💬点赞👍收藏📂加关注
前言
今天是《CSDN21天学习挑战赛》的第19天 上一节学习了Python中的包和模块 今天将学习Python的文件操作
活动地址:CSDN21天学习挑战赛
@TOC
Python文件操作
一、编码格式介绍
常见的字符编码格式
Python的解释器使用的是Unicode(内存)Unicode定长编码:2个字节表示一个字符
.py文件放在磁盘上使用UTF—8储存(外存)UTF-8变长编码:UTF-8是Unicode的实现,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.操作原理:
文件操作原理
- python操作文件
- 打开或新建文件
open- 读,写文件
read、write- 关闭资源
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) | 用于判断是否为路径 |