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))