生命在于学习——Python人工智能原理(2.6.1)

六 Python的文件系统

6.1 打开文件

在Python中,可以使用内置的open函数来打开文件,open函数的基本语法如下:

python 复制代码
file = open(file_name, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
python 复制代码
参数说明:

file_name (必需):要打开的文件名或路径。
mode (可选,默认为 'r'):文件打开模式。常见的模式有:
'r':只读模式(默认)。
'w':只写模式,如果文件已存在则会被覆盖。
'x':创建文件并写入,如果文件已存在则会产生异常。
'a':追加模式,如果文件已存在则在文件末尾追加内容。
'b':二进制模式(可以与上述模式组合,如 'rb' 或 'wb')。
't':文本模式(默认,通常不需要明确指定)。
'+':表示可以同时读写文件(如 'r+'、'w+'、'a+')。
buffering (可选,默认为 -1):设置缓冲策略。
0 表示无缓冲(仅用于二进制模式)。
1 表示行缓冲(仅用于文本模式)。
大于 1 的值表示缓冲区大小(以字节为单位)。
-1 表示默认缓冲策略。
encoding (可选,用于文本模式):设置文件编码方式,如 'utf-8'。
errors (可选,用于文本模式):设置编码错误的处理方式,如 'ignore'、'replace' 等。
newline (可选,用于文本模式):控制跨平台的新行符。可以是 None、'\n'、'\r'、'\r\n' 或其他任何字符串。
closefd (可选,仅当文件描述符由 opener 提供时有用):如果为 True,则在文件对象被关闭时,底层文件描述符也会被关闭。默认为 True。
opener (可选):一个可调用对象,用于打开文件描述符,如 os.open()。

6.2 关闭文件

使用完文件后,应该及时关闭以释放资源。

文件使用结束后采用close()方法关闭,关闭格式:

python 复制代码
变量名.close()

6.3 文件读取

当文件被打开后,按照打开方式的不同对文件进行相应的读写操作,如果文件用文本文件方式打开,读写按照字符串方式进行操作,使用当前计算机使用的编码或指定编码。

如果用二进制的方式打开,读写按照字节流方式操作。

python 复制代码
1. read(size)
read(size)方法从文件中读取指定数量的字节(或字符,在文本模式下)并返回。如果指定了size参数,则读取指定数量的字节或字符;如果没有指定size或size为负值,则读取并返回整个文件。

示例:

python
with open('example.txt', 'r') as file:  
    content = file.read(10)  # 读取前10个字符  
    print(content)
2. readline()
readline()方法从文件中读取一行,包括行尾的换行符(\n)。如果文件已经读取到末尾,则返回空字符串。这个方法在需要逐行处理文件内容时非常有用。

示例:

python
with open('example.txt', 'r') as file:  
    line = file.readline()  # 读取第一行  
    print(line, end='')  # 输出第一行,并去除默认的换行符  
  
    # 逐行读取并打印文件内容  
    while True:  
        line = file.readline()  
        if not line:  # 如果读取到空字符串,说明文件已读完  
            break  
        print(line, end='')
3. readlines()
readlines()方法读取文件中的所有行,并返回一个包含所有行(作为字符串列表)的列表。每一行都是一个字符串,包括末尾的换行符(\n)。如果文件很大,这个方法可能会占用大量内存,因为它会一次性读取整个文件。

示例:

python
with open('example.txt', 'r') as file:  
    lines = file.readlines()  # 读取所有行到列表中  
  
# 遍历列表并打印每一行  
for line in lines:  
    print(line, end='')

6.4 文件写入

在Python中,文件写入操作通常涉及使用open()函数以写入模式('w'、'a'、'x'等)打开一个文件,并使用文件对象的write()方法将内容写入文件。以下是关于文件写入的详细介绍:

python 复制代码
写入模式
'w': 写入模式,如果文件已存在则会被覆盖,如果文件不存在则创建新文件。
'a': 追加模式,如果文件已存在,则在文件末尾追加内容;如果文件不存在,则创建新文件。
'x': 独占创建模式,如果文件已存在则会产生FileExistsError异常,如果文件不存在则创建新文件。
使用 write() 方法
write()方法用于将字符串写入文件。

python
with open('example.txt', 'w') as file:  # 以写入模式打开文件  
    file.write('Hello, World!\n')  # 写入字符串到文件  
  
with open('example.txt', 'a') as file:  # 以追加模式打开文件  
    file.write('This is an appended line.\n')  # 在文件末尾追加内容

写入其他类型数据

如果需要将非字符串类型的数据(如整数、浮点数、列表等)写入文件,通常需要先将其转换为字符串格式。

python 复制代码
python
with open('numbers.txt', 'w') as file:  
    file.write(str([1, 2, 3, 4, 5]))  # 将列表转换为字符串并写入文件

注意事项

使用with语句可以确保文件在使用完毕后被正确关闭。

写入文件时,如果文件不存在,则会创建新文件;如果文件已存在且使用'w'模式,则会覆盖原有内容。

如果需要在文件末尾追加内容,应使用'a'模式。

6.5 文件系统其他api

Python的os和os.path模块提供了许多与文件系统交互的API,以下是一些常用的API:

python 复制代码
os 模块
os.listdir(path): 列出指定目录下的文件和子目录名。
os.getcwd(): 返回当前工作目录。
os.chdir(path): 改变当前工作目录。
os.mkdir(path): 创建新目录。
os.rmdir(path): 删除空目录。
os.remove(path): 删除文件。
os.rename(old_path, new_path): 重命名文件或目录。
os.path.exists(path): 检查路径是否存在。
os.path.isfile(path): 检查路径是否为文件。
os.path.isdir(path): 检查路径是否为目录。
os.path.getsize(path): 获取文件大小(以字节为单位)。
os.path 模块
os.path模块提供了许多用于处理文件路径的实用函数。

os.path.abspath(path): 返回指定文件的绝对路径。
os.path.basename(path): 返回路径中的文件名。
os.path.dirname(path): 返回路径中的目录名。
os.path.join(path, *paths): 将一个或多个路径组件连接成一个路径名。
os.path.split(path): 将路径拆分为目录名和文件名。
os.path.splitext(path): 将路径拆分为文件名和扩展名。
os.path.isabs(path): 判断路径是否为绝对路径。
os.path.getmtime(path): 返回文件或目录的最后修改时间。
os.path.getatime(path): 返回文件或目录的最后访问时间。
os.path.getctime(path): 返回文件或目录的创建时间(在某些系统上可能是最后修改时间)。
使用这些API可以方便地在Python中进行文件系统的操作。
相关推荐
yunsr4 分钟前
python作业3
开发语言·python
数据知道4 分钟前
PostgreSQL 性能优化: I/O 瓶颈分析,以及如何提高数据库的 I/O 性能?
数据库·postgresql·性能优化
历程里程碑5 分钟前
普通数组-----除了自身以外数组的乘积
大数据·javascript·python·算法·elasticsearch·搜索引擎·flask
曦月逸霜6 分钟前
Python快速入门——学习笔记(持续更新中~)
笔记·python·学习
AI视觉网奇8 分钟前
blender 导入fbx 黑色骨骼
学习·算法·ue5·blender
喵手8 分钟前
Python爬虫实战:采集菜谱网站的“分类/列表页”(例如“家常菜”或“烘焙”频道)数据,构建高可用的美食菜谱数据采集流水线(附CSV导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集菜谱网站数据·家常菜或烘焙频道·构建高可用食谱数据采集系统
繁华落尽,寻一世真情8 分钟前
【基于 AI 的智能小说创作助手】MuMuAINovel-sqlite 基于 AI 的智能小说创作助手
数据库·人工智能·sqlite
喵手9 分钟前
Python爬虫实战:硬核解析 Google Chrome 官方更新日志(正则+文本清洗篇)(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·csv导出·监控谷歌版本发布历史·获取稳定版更新日志
星火开发设计9 分钟前
this 指针:指向对象自身的隐含指针
开发语言·数据结构·c++·学习·指针·知识
Gain_chance11 分钟前
37-学习笔记尚硅谷数仓搭建-ADS层分析并以各品牌商品下单统计为例
笔记·学习