Python写入文件(write和writelines)

简介: Python写入文件(write和writelines)详解

如果以 r+、w、w+、a、a+ 模式打开文件,则都可以写入。需要指出的是,当以 r+、w、w+ 模式打开文件时,文件指针位于文件开头处;当以 a、a+ 模式打开文件时,文件指针位于文件结尾处。

另外,需要说明的是,当以 w 或 w+ 模式打开文件时,程序会立即清空文件的内容。
文件指针的概念
文件指针用于标明文件读写的位置。假如把文件看成一个水流,文件中每个数据(以 b 模式打开,每个数据就是一个字节;以普通模式打开,每个数据就是一个字符)就相当于一个水滴,而文件指针就标明了文件将要读写哪个位置。

文件对象提供了以下方法来操作文件指针:
seek(offset[, whence]):该方法把文件指针移动到指定位置。当 whence 为 0 时(这是默认值),表明从文件开头开始计算,比如将 offset 设为 3,就是将文件指针移动到第 3 处;当 whence 为 1 时,表明从指针当前位置开始计算,比如文件指针当前在第 5 处,将 offset 设为 3,就是将文件指针移动到第 8 处;当 whence 为 2 时,表明从文件结尾开始计算,比如将 offset 设为 3,表明将文件指针移动到文件结尾倒数第 3 处。
tell():判断文件指针的位置。

此外,当程序使用文件对象读写数据时,文件指针会自动向后移动:读写了多少个数据,文件指针就自动向后移动多少个位置。

下面程序示范了文件指针操作:
f = open('filept_test.py', 'rb')

判断文件指针的位置

print(f.tell()) # 0

将文件指针移动到3处

f.seek(3)
print(f.tell()) # 3

读取一个字节,文件指针自动后移1个数据

print(f.read(1)) # o
print(f.tell()) # 4

将文件指针移动到5处

f.seek(5)
print(f.tell()) # 5

将文件指针向后移动5个数据

f.seek(5, 1)
print(f.tell()) # 10

将文件指针移动到倒数第10处

f.seek(-10, 2)
print(f.tell())
print(f.read(1)) # d
上面程序示范了使用 seek() 方法来移动文件指针,包括从文件开头、指针当前位置、文件结尾处开始计算。运行上面程序,结合程序输出结果可以体会文件指针移动的效果。

当文件指针位于哪里时,程序就会读取哪个位置的数据;当程序读取多少个数据时,文件指针就会自动向后移动多少个位置。
输出内容
文件对象提供的写文件的方法主要有两个:
write(str 或 bytes):输出字符串或字节串。只有以二进制模式(b 模式)打开的文件才能写入字节串。
writelines(可迭代对象):输出多个字符串或多个字节串。

下面程序示范了使用 write() 和 writelines() 输出字符串:
import os
f = open('x.txt', 'w+')

os.linesep代表当前操作系统上的换行符

f.write('我爱Python' + os.linesep)
f.writelines(('土门壁甚坚,'+ os.linesep,

'杏园度亦难。'+ os.linesep,
'势异邺城下,'+ os.linesep,
'纵死时犹宽。'+ os.linesep))

上面程序中第 4 行代码调用 write() 方法输出单个字符串;第 5 行代码则调用 writelines() 方法输出多个字符串。

当采用上面方法输出文件时,程序会使用当前操作系统默认的字符集。如果需要使用指定的字符集来输出文件,则可以来用二进制形式(程序先将所输出的字符串转换成指定字符集对应的二进制数据(字节串),然后输出二进制数据)。

下面程序示范了使用二进制数据输出,通过这种方式来实现以 UTF-8 字符集保存文件:
import os
f = open('y.txt', 'wb+')

os.linesep代表当前操作系统上的换行符

f.write(('我爱Python' + os.linesep).encode('utf-8'))
f.writelines((('土门壁甚坚,'+ os.linesep).encode('utf-8'),

('杏园度亦难。'+ os.linesep).encode('utf-8'),
('势异邺城下,'+ os.linesep).encode('utf-8'),
('纵死时犹宽。'+ os.linesep).encode('utf-8')))

上面程序中的代码以 wb+ 模式打开文件,这意味着程序会以二进制形式来输出文件,此时程序输出的必须是宇节串,不能是字符串。因此,程序调用 encode() 方法将字符串转换成字节串,转换时指定使用 UTF-8 字符集,这意味着程序将会以 UTF-8 字符集来保存文件。

该程序输出的文件内容与上一个程序输出的文件内容相同,只是该程序输出的文件内容是以 UTF-8 字符集保存的。

从上面的程序可以看到,当使用 w+、wb+ 模式打开文件时,会导致文件内容被清空。因此,无论程序运行多少次,其输出的文件内容都只保留最近一次的输出数据。如果程序希望在文件后面追加内容,则应该使用 a+ 或 ab+ 模式。例如如下程序:
import os
f = open('z.txt', 'a+')

os.linesep代表当前操作系统上的换行符

f.write('我爱Python' + os.linesep)
f.writelines(('土门壁甚坚,'+ os.linesep,

'杏园度亦难。'+ os.linesep,
'势异邺城下,'+ os.linesep,
'纵死时犹宽。'+ os.linesep))

上面程序以 a+ 模式打开指定文件,这意味着以追加模式来打开文件,因此,使用 open() 函数打开文件后,不会立即清空文件内容,并且会将文件指针移动到文件结尾处,程序会在文件结尾处追加内容。

每次运行上面程序,都会向 z.txt 文件中追加一段内容;程序运行的次数越多,z.txt 文件的内容就会越多。

目录
相关文章
|
28天前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
243 60
|
22天前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
4天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
9 2
|
26天前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
46 1
Python实用记录(十三):python脚本打包exe文件并运行
|
20天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
21天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
26天前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
34 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
1月前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
|
1月前
|
存储 关系型数据库 MySQL
Python写入文件内容:从入门到精通
本文详细介绍了使用Python进行文件写入的基本方法及高级技巧。从基础语法入手,讲解了如何使用`open()`函数的不同模式(如`'w'`和`'a'`)来创建或修改文件,并通过具体示例演示了`write()`和`writelines()`方法的应用。进一步探讨了利用CSV模块处理复杂数据结构的写入操作,以及在实际项目中如何批量导出数据库记录到CSV文件。最后,文章还讨论了在处理大数据集和云存储时的注意事项与优化方案。
|
1月前
|
计算机视觉 Python
Python操作PDF文件
Python操作PDF文件

热门文章

最新文章