Python文件操作详解:open函数、写入模式与实战案例

听雨眠
听雨眠
发布时间:2026-10-15| 4人浏览过
原创

本文详解Python中文件的创建与写入操作。重点解析open()函数的参数与返回值,深入对比w、w+、a、ab等写入模式的区别与适用场景。针对Windows系统中文编码问题提供解决方案,并通过自动创建包及自定义换行类两个实战案例,展示文件操作的高级应用技巧。

在前面的章节中,我们已经通过os模块学习了文件夹的创建与读取方法。然而,文件作为数据存储的基本单位,其创建与读写操作同样重要。本节将深入讲解Python中文件处理的核心知识,掌握这些内容后,您将能够灵活地对文件进行读写操作。

内置函数 - open 获取文件对象

open() 函数

open()是Python中用于读写文件的基础函数。调用该函数可以生成一个文件对象,利用这个对象,我们可以执行文件的创建、读取和写入等操作。

用法:

open(path, mode)

参数说明:

path:指定文件的路径。

mode:指定文件的操作模式,例如只读、写入或追加等。具体模式将在后文详细介绍。

返回值:

文件对象。

示例用法如下:

file = open('d://test.txt', 'w')

# >>> 代码释义:使用 open() 函数 对 D 磁盘下的 'test.txt' 文件执行写入的操作 ( w 为写入的操作 ) 并赋值给变量 file

利用文件对象进行创建与写入

文件操作的写入模式

模式介绍
w创建文件(w为写入的操作,当文件不存在时,则会创建文件;已创建文件,则内容会被覆盖)
w+创建文件并读取文件
wb二进制形式创建文件(与 w 的功能相同,只不过 web 的写入类型为 byte )
wb+二进制形式创建或追加内容(如果文件存在不会覆盖原本的内容,而是以 byte 类型进行追加)
a在文件中追加内容,如果没有该文件则会创建文件
a+读写模式追加(同样是追加内容,只不过赋予了读取的功能)
ab+二进制形式读写追加(可以追加并读取 byte 类型的模式)

文件对象的写入操作方法

方法名参数介绍举例
writeMessage(字符串)写入信息
如果是带有b的模式,则会变为 byte 类型
f.write(‘hello\n’)
writelinesMessage_list(列表)批量写入
列表内须是字符串,按照索引位置依次写入;
若为b的模式,同上
f.writelines([‘a\n’, ‘b\n’])
close无关闭并保存文件f.close()

重要提示:在完成文件操作后,务必调用close()方法关闭文件。若不关闭文件,可能导致内存占用过高;若频繁生成文件对象进行写入,甚至可能引发内存溢出,导致程序异常。

使用 w 模式 执行 write 方法

import os
import os.path


current_path = os.getcwd()
# print(current_path)

file_test = open(current_path + '/' + 'test.txt', 'w', encoding='utf-8')    
# 注意如果是在WIN系统,在写入中文时,需要设置编码格式;如果不是WIN系统,则不需要设置编码格式

file_test.write('Python 是一门优雅的编程语言')
file_test.close()

在前文的脚本中我们提到,在Windows系统下写入中文内容时,必须指定编码格式。如果不指定编码,虽然程序不会报错且能写入成功,但打开文件查看时会出现乱码,如下图所示:

基于上述演示案例,我们在text.txt文件的基础上,继续演示w模式的功能。

import os
import os.path


current_path = os.getcwd()
# print(current_path)

file_test = open(current_path + '/' + 'test.txt', 'w', encoding='utf-8')
file_test.write('Python 是一门优雅的编程语言')
file_test.close()

file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w', encoding='utf-8')
file_test.write('Python 不仅是一门优雅的编程语言,还不掉头发')

可以看到,针对text.txt文件使用w模式写入新内容“Python 不仅是一门优雅的编程语言,还不掉头发”后,原文件内容已被完全覆盖。

使用 w+ 模式 执行 write 方法

这里我们先利用w+模式写入内容。

import os.path


current_path = os.getcwd()

file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w+', encoding='utf-8')
file_test.write('人生苦短 我用Python')
file_test.close()

与w模式不同,w+模式既支持创建和写入文件,也支持读取文件。下面演示如何读取文件(注意:读取结果需在终端查看,Pycharm界面不直接显示读取内容)。

import os.path


current_path = os.getcwd()

file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'w+', encoding='utf-8')
file_test.write('人生苦短 我用Python')
file_test.read()
file_test.seek(0)
file_test.read()
file_test.close()

注意:只有w+模式可以使用read()与seek()函数读取文件内容。若使用w模式调用read()函数,将会报错,如下图所示:

使用 ab 模式 执行 write 方法

我们先尝试使用ab模式,将字符串通过write方法以追加形式写入文件。

import os.path


current_path = os.getcwd()

file_path = os.path.join(current_path, 'test.txt')
file_test = open(file_path, 'ab')
file_test.write('Python 是一种很有意思的编程语言')

终端执行效果如下:

由于传入的是字符串类型,无法直接追加写入文件。那么,将字符串转换为byte类型是否能成功呢?

这是为何?难道是我们使用方法有误?其实不然,这里写入的byte类型数据,需要先转换为bytes类型才能成功写入。示例如下:

此时再次执行写入动作,即可成功将内容追加到文件中。

file_test.write(_message)
file_test.close()

使用 a 模式 执行 writelines 方法

借助上述案例,我们定义一个字符串列表,然后通过open()函数的a模式,使用writelines方法将内容写入文件。

import os.path


current_path = os.getcwd()

file_path = os.path.join(current_path, 'test.txt')
file_list = ['\n今天天气不错\n', '挺风和日丽的\n', '我们下午没有课\n']
file_test = open(file_path, 'a')
file_test.writelines(file_list)
file_test.close()

执行效果如下图:

实战小案例

需求:实现一个可以自动创建Python包的函数。

import os


def create_package(path):			# 定义一个创建 包 的函数
    if os.path.exists(path):		# 判断路径是否存在,若已经存在,则抛出异常
        raise Exception('%s 已经存在,不可创建' % path)
    else:
        os.mkdir(path)

    init_path = os.path.join(path, '__init__.py')
    file_init = open(init_path, 'w', encoding='utf-8')
    file_init.write('# coding:utf-8\n')
    file_init.close()


if __name__ == '__main__':
    current_path = os.getcwd()
    path = os.path.join(current_path, 'test_package')
    create_package(path)

执行结果如下:

拓展:从上述脚本中我们可以发现,每次写入时都需要手动添加\n换行符,较为繁琐。我们可以自定义一个Open类,实现每次写入时自动添加换行符的功能。

class Open(object):
    def __init__(self, path, mode='w', is_return=True):     # 这里的 is_return 我们定义的是换行的意思,结合下文的 message 理解
        self.path = path
        self.mode = mode
        self.is_return = is_return

    def write(self, message):
        file_test = open(self.path, mode=self.mode)
        if self.is_return:      # 如果返回 Ture 则 在 message 后,增加换行符
            message = '%s\n' % message
        file_test.write(message)
        file_test.close()


if __name__ == '__main__':
    current_path = os.getcwd()
    # path = os.path.join(current_path, 'test_package')
    open_path = os.path.join(current_path, 'test_new_line.txt')
    # create_package(path)
    # create_package(open_path)
    open_test = Open(open_path)
    open_test.write('这是一段测试换行符的字符串信息')

执行结果如下:

到此,关于Python文件创建与写入的详解介绍完毕。更多关于Python文件创建与写入的内容,欢迎搜索本站历史文章或继续浏览后续相关文章。希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。