【Python】文件操作

目录

1.文件的基本概念

1.1文件的分类

1.2文件的路径

2.文件的打开与关闭

3.文件读写

3.1写数据

3.2读数据

4.常用函数

5.案例:文件拷贝


1.文件的基本概念

在计算机中,文件是存储在磁盘上的数据集合。文件可以包含各种类型的数据,如文本、图像、音频、视频或程序代码。

文件系统通过文件名和文件路径来定位和管理文件。文件名通常包含文件的名称和扩展名,扩展名用于表示文件的类型(例如 .txt 表示文本文件,.jpg 表示图像文件)。文件路径可以是绝对路径(从文件系统的根目录开始)或相对路径(相对于当前工作目录)。

在编写程序的时候,数据是以二进制的形式存储在内存的,将数据写到磁盘文件的过程称之为持久化。

1.1文件的分类

纯文本文件

有统一的编码,可以被看做存储在磁盘上的长字符串。

纯文本文件编码格式常见的有ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等。

二进制文件

没有统一的字符编码,直接由0与1组成。

如图片文件(jpg、png),视频文件(avi)等。

1.2文件的路径

相对路径

从当前位置到指定位置的路径。

如:./hello_world.py

./代表当前路径。../代表上一级路径。

绝对路径

从根目录到指定位置的路径。

如:E: / Hello /hello.py

2.文件的打开与关闭

打开文件

使用 open() 打开或创建文件,该方法执行完毕之后返回的是一个file对象。

常用形式

python 复制代码
open(文件名, 模式)
f = open("test.txt", "w")

|------------|-------------------------------|
| 模式 | 说明 |
| r | 读写方式:只读,文件若不存在会报错。默认此模式 |
| w | 读写方式:写入,写入前清空原有数据。文件不存在会创建文件 |
| a | 读写方式:追加写入,在原有数据后追加,文件不存在会创建文件 |
| x | 读写方式:创建新文件并写入,文件若已存在会报错 |
| b | 编码方式:以二进制打开。一般用于非文本文件如图片等 |
| t | 编码方式:以文本模式打开,默认此模式 |
| + | 能读能写 |

完整形式

python 复制代码
open(
    file,  # 文件路径
    mode="r",  # 文件打开模式
    buffering=-1,  # 缓冲
    encoding=None,  # 文本编码方式,一般用utf8
    errors=None,  # 报错级别
    newline=None,  # 区分换行符
    closefd=True,  # 传入的file参数类型
    opener=None,  # 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符
)

关闭文件

python 复制代码
f.close()

3.文件读写

3.1写数据

python 复制代码
# 打开文件
f = open("test.txt", "w")
# 写入数据
f.write("hello world\n")
f.write("nihao python\n")
# 关闭文件
f.close()

3.2读数据

​​​​​​​read

read([size]) 可以从文件中读取数据,size 表示要从文件中读取的数据的长度(编码模式b:单位是字节,编码模式t:单位是字符),如果没有传入 size 则读取文件中所有的数据。

python 复制代码
# 打开文件
f = open("test.txt", "rt")
# 读取文件所有数据 
print(f.read())
# 关闭文件
f.close()
print("-"*20)
f = open("test.txt", "rt")
# 读取文件5个字节数据
print(f.read(5))
print(f.read(8))
f.close()

​​​​​​​readline

readline([size]) 可以从文件中读取整行数据,也可以通过 size 设置读取数据的长度。

python 复制代码
f = open("test.txt", "rt")
print(f.readline())
print(f.readline(1))
print(f.readline(1))
f.close()

​​​​​​​readlines

python 复制代码
readlines([size]) 读取所有行并返回列表,若给定 size>0,返回总和大约为 size 字节的行, 实际读取值可能比 size 大。
python 复制代码
f = open("test.txt", "r", encoding="utf-8")
print(f.readlines())
f.close()

4.常用函数

|------------------------------------|---------------------------------------------------------------------------------------------------------|
| 函数 | 说明 |
| file.seek(offset[,from]) | 移动偏移量并返回新的绝对位置。 offset:移动的字节数,如果是负数表示从倒数第几位开始。 from:从哪个位置开始移动;0为开头,1为当前位置,2为末尾。from不为0时需使用'b'二进制模式打开文件。 |
| file.tell() | 返回当前偏移量 |
| file.truncate([size]) | 从开头开始截断文件为size个字符,无size表示从当前位置截断。windows系统下的换行大小2个字符 |
| file.writelines(seq) | 将序列中字符串写入文件,需要自己加入换行符 |
| file.readable() | 如果可以读取文件则返回True |
| file.writeable() | 如果可以写入文件则返回True |
| file.seekable() | 如果文件支持随机访问则返回True |
| os.rename(old,new) | 重命名文件 |
| os.remove(file) | 删除文件 |
| os.mkdir(dir) | 创建目录,不支持递归创建 |
| os.makedirs(dir) | 递归创建目录 |
| os.getcwd() | 获取当前路径 |
| os.chdir(dir) | 进入指定目录 |
| os.listdir(dir) | 获取目录下文件和目录列表 |
| os.rmdir(dir) | 删除空目录 |
| os.removedirs(dir) | 递归删除空目录 |
| os.path.abspath(path) | 将相对路径转换为绝对路径 |
| os.path.basename(path) | 获取路径中的文件名部分 |
| os.path.dirname(path) | 获取路径中的目录部分 |
| os.path.join(*paths) | 拼接多个路径,自动处理路径分隔符 |
| os.path.split(path) | 将路径分割为目录和文件名的元组 |
| os.path.splitext(path) | 将路径分割为文件名和扩展名的元组 |
| os.path.exists(path) | 判断路径是否存在 |
| os.path.isfile(path) | 判断路径是否为文件 |
| os.path.isdir(path) | 判断路径是否为目录 |
| os.path.getsize(path) | 获取文件的大小,以字节为单位 |
| os.path.getatime(path) | 获取文件的最后访问时间 |
| os.path.getmtime(path) | 获取文件的最后修改时间 |

​​​​​​​os.walk()递归遍历目录

用法

python 复制代码
# 返回一个3元组(dirpath文件夹路径, dirnames文件夹名字, filenames文件名)
os.walk(
    top,  # 根目录
    topdown=True,  # 可选,默认为True:自顶向下,False:自底向上
    onerror=None,  # 可选,是一个函数
    followlinks=False,  # 可选,设置为True则通过软链接访问目录
)

案例:递归遍历当前路径下所有目录和文件

python 复制代码
import os

for root, dirs, files in os.walk(os.getcwd()):
    print("当前路径:", root)
    print("目录:", dirs)
    print("文件:", files)
    print()

5.案例:文件拷贝

python 复制代码
# source_file : 源文件路径
# dest_file: 目的地文件路径
def copyFile(source_file_path,dest_file__path):
    # 打开源文件
    source_file = open(source_file_path, 'rb')
    # 读取源文件中的内容
    content = source_file.read()

    # 打开目的地文件
    dest_file = open(dest_file__path, 'wb')
    # 将读取到的数据写入到目的地
    dest_file.write(content)

    # 关闭源文件
    source_file.close()
    # 关闭目的地文件
    dest_file.close()

copyFile("D:/mv.png","E:/mv.png")

优化:这种方式可以不用读取整个文件,减小内存压力

python 复制代码
# source_file : 源文件路径
# dest_file: 目的地文件路径
def copyFile(source_file_path,dest_file__path):
    # 打开源文件
    source_file = open(source_file_path, 'rb')
    # 打开目的地文件
    dest_file = open(dest_file__path, 'wb')
    # 读取源文件中的内容
    content = source_file.read(1024)
    while content:
        # 将读取到的数据写入到目的地
        dest_file.write(content)
        # 继续从源文件读取数据
        content = source_file.read(1024)
    # 关闭源文件
    # 关闭目的地文件
    dest_file.close()

copyFile("D:/mv.png","E:/mv.png")
相关推荐
吕源林2 小时前
如何使用关联数组_Index-By Table集合类型定义与遍历
jvm·数据库·python
2301_775148152 小时前
如何配置物化视图只进行完全刷新_COMPLETE Refresh的强制刷新场景
jvm·数据库·python
m0_743623922 小时前
HTML函数本地测试需多少带宽_HTML函数与网络硬件关系【操作】
jvm·数据库·python
YJlio2 小时前
2026年4月18日60秒读懂世界:从神舟二十号出舱到L2新国标公示,今天最值得关注的6个信号
windows·python·django·计算机外设·电脑·outlook·eixv3
2301_813599552 小时前
c#如何添加按钮点击事件_c#添加按钮点击事件的几种常见用法
jvm·数据库·python
2301_814809862 小时前
如何让导航栏下落动画变慢?——CSS 动画时长精准控制教程
jvm·数据库·python
weixin_424999362 小时前
mysql如何利用并行查询提速_mysql 8.0并行扫描特性
jvm·数据库·python
来自远方的老作者2 小时前
第10章 面向对象-10.3 封装
开发语言·python·私有属性·私有方法·封装
2201_761040592 小时前
PHP8.3新特性对AI开发影响_最新功能应用【解答】
jvm·数据库·python