Python读写文件

简介: Python读写文件

Python读写文件
在Python中,文件读写是进行数据存储和处理的基本操作。无论是读取配置文件、保存用户输入还是处理文本数据,掌握文件的读写方法都至关重要。本篇文章将深入探讨如何在Python中进行文件的读写,包括各种操作的详细示例。

1. 文件的打开与关闭
1.1 打开文件
要进行文件的读写,首先需要使用 open() 函数打开文件。open() 函数接受两个主要参数:

file: 要打开的文件名(包括路径)。
mode: 打开文件的模式,决定了你可以对文件执行哪些操作。
常用的模式包括:

  • 'r': 只读模式(默认)。文件必须存在。
  • 'w': 只写模式。如果文件已存在则会被覆盖;如果文件不存在,则会创建新文件。
  • 'a': 追加模式。数据会被写入文件末尾,如果文件不存在同样会创建新文件。
  • 'b': 二进制模式(可与其他模式组合使用)。
  • 'x': 独占写入模式。如果文件已经存在则引发异常。

示例代码如下:

# 打开一个文件进行读取
file = open('example.txt', 'r')  # 如果文件不存在,会引发 FileNotFoundError

# 或者以写入模式打开文件
file_w = open('output.txt', 'w')

1.2 关闭文件
完成文件操作后,应确保关闭文件,以释放系统资源。可以使用 close() 方法手动关闭文件。更推荐的方式是使用 with 语句,这样在离开 with 块时,文件会自动关闭。

手动关闭文件示例:

file.close()  # 手动关闭文件

使用 with 语句示例:

with open('example.txt', 'r') as file:
    content = file.read()
# 文件会在此块结束时自动关闭

2. 读取文件内容
一旦文件被打开,就可以通过多种方式读取文件中的内容。

2.1 使用 read()
read() 方法读取整个文件的内容,并将其作为字符串返回。

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)  # 输出整个文件内容

2.2 使用 readline()
readline() 方法每次读取文件的一行,调用多次可以逐行读取。

with open('example.txt', 'r') as file:
    line = file.readline()  # 读取第一行
    while line:  # 循环直到没有更多行
        print(line.strip())  # strip() 去除行末的换行符
        line = file.readline()  # 读取下一行

2.3 使用 readlines()
readlines() 方法读取文件的所有行,并以列表形式返回。每一行为列表中的一个元素。

with open('example.txt', 'r') as file:
    lines = file.readlines()  # 返回一个列表,其中每个元素是文件的一行
    for line in lines:
        print(line.strip())  # 输出每一行,去掉换行符

3. 写入文件内容
要将数据写入文件,可以使用 'w' 或 'a' 模式打开文件,然后使用 write() 或 writelines() 方法。

3.1 使用 write()
write() 方法将字符串写入到文件中。如果文件已存在且以 'w' 模式打开,则会覆盖原有内容。

with open('output.txt', 'w') as file:
    file.write("Hello, World!\n")  # 写入第一行
    file.write("Welcome to Python file operations.\n")  # 写入第二行

3.2 使用 writelines()
writelines() 方法接受一个字符串列表,将所有字符串写入文件。注意,这不会添加换行符,因此需要自行在字符串末尾添加。

lines_to_write = ["Line 1\n", "Line 2\n", "Line 3\n"]  # 每行后面加上换行符
with open('output.txt', 'a') as file:  # 使用'a'模式以追加内容
    file.writelines(lines_to_write)  # 将多个行写入文件

4. 处理文本与二进制文件
Python支持文本文件和二进制文件。文本文件通常用于保存字符串数据,而二进制文件则用于保存非文本数据(如图片或音频)。

4.1 文本文件
默认情况下,open() 函数以文本模式打开文件。例如:

with open('textfile.txt', 'r') as file:
    content = file.read()

4.2 二进制文件
要以二进制模式打开文件,需要在模式字符串中添加 'b'。例如,读取和写入图片文件:

# 写入二进制文件
with open('image.png', 'rb') as binary_file:  # 以二进制读取模式打开
    data = binary_file.read()  # 读取文件内容

# 保存二进制数据
with open('copy_image.png', 'wb') as binary_copy:
    binary_copy.write(data)  # 写入数据到新文件

5. 异常处理
文件读写操作可能会引发异常,例如文件未找到、权限不足等。因此,建议使用 try...except 块来捕获这些异常并做出相应处理。

try:
    with open('non_existent_file.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print("错误:文件未找到,请检查文件名或路径。")
except PermissionError:
    print("错误:您没有权限访问该文件。")
except Exception as e:
    print(f"发生了其他错误:{e}")

6. 文件指针
文件指针决定了从文件的哪个位置开始读取或写入。使用 seek() 方法可以移动文件指针。

示例:使用 seek()

with open('example.txt', 'r') as file:
    print(file.read(5))  # 读取前5个字符
    file.seek(0)  # 移动指针到文件开头
    print(file.read())  # 重新读取整个文件

获取当前位置
使用 tell() 方法可以获取文件指针的当前位置。

with open('example.txt', 'r') as file:
    file.read(10)
    position = file.tell()  # 获取当前指针的位置
    print(f"当前文件指针位置: {position}")

小结
在Python中进行文件的读写操作非常简单易学。本篇文章总结了以下要点:

  • 打开文件:使用 open() 函数指定文件名和模式。
  • 读取文件:使用 read(), readline(), 和 readlines() 方法。
  • 写入文件:使用 write() 和 writelines() 方法。
  • 处理文本与二进制文件:通过模式选择合适的打开方式。
  • 异常处理:用 try...except 块捕获潜在的异常。
  • 文件指针:使用 seek() 和 tell() 控制文件读取位置。

通过掌握这些基础知识,你将能够有效地在Python中进行文件操作,为数据处理和分析打下坚实的基础。

相关文章
|
25天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
2天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
279 12
|
17天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
5天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
20天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
22天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2583 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
4天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
175 2
|
2天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
101 65
|
5天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
273 2
|
21天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1580 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码