生命在于学习——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中进行文件系统的操作。
相关推荐
白云如幻几秒前
MySQL的分组函数
数据库·mysql
千澜空16 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
荒川之神17 分钟前
ORACLE 闪回技术简介
数据库·oracle
霍格沃兹测试开发学社测试人社区17 分钟前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
斯凯利.瑞恩23 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
今天我又学废了33 分钟前
Scala学习记录,List
学习
yannan201903131 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁1 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev1 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
王俊山IT1 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习