Python写⼊⽂件(write和writelines)详解
如果以 r+、w、w+、a、a+ 模式打开⽂件,则都可以写⼊。需要指出的是,当以 r+、w、w+ 模式打开⽂件时,⽂件指针位于⽂件开头处;当以 a、a+ 模式打开⽂件时,⽂件指针位于⽂件结尾处。
另外,需要说明的是,当以 w 或 w+ 模式打开⽂件时,程序会⽴即清空⽂件的内容。
⽂件指针的概念
⽂件指针⽤于标明⽂件读写的位置。假如把⽂件看成⼀个⽔流,⽂件中每个数据(以 b 模式打开,每个数据就是⼀个字节;以普通模式打开,每个数据就是⼀个字符)就相当于⼀个⽔滴,⽽⽂件指针就标明了⽂件将要读写哪个位置。
图 1 简单⽰意了⽂件指针的概念。
⽂件指针概念⽰意图
图 1 ⽂件指针概念⽰意图
⽂件对象提供了以下⽅法来操作⽂件指针:
seek(offset[, whence]):该⽅法把⽂件指针移动到指定位置。当 whence 为 0 时(这是默认值),表明从⽂件开头开始计算,⽐如将 offset 设为 3,就是将⽂件指针移动到第 3 处;当 whence 为 1 时,表明从指针当前位置开始计算,⽐如⽂件指针当前在第 5 处,将 offset 设为 3,就是将⽂件指针移动到第 8 处;当whence 为 2 时,表明从⽂件结尾开始计算,⽐如将 offset 设为 3,表明将⽂件指针移动到⽂件结尾倒数第 3 处。
tell():判断⽂件指针的位置。
此外,当程序使⽤⽂件对象读写数据时,⽂件指针会⾃动向后移动:读写了多少个数据,⽂件指针就⾃动向后移动多少个位置。最后,如果你的时间不是很紧张,并且⼜想快速的提⾼,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多⼈进步都很快,需要你不怕吃苦哦!⼤家可以去添加上看⼀下~
下⾯程序⽰范了⽂件指针操作:
f = open('filept_test.py', 'rb')
# 判断⽂件指针的位置
ll()) # 0
# 将⽂件指针移动到3处
f.seek(3)
ll()) # 3
# 读取⼀个字节,⽂件指针⾃动后移1个数据
ad(1)) # o
ll())  # 4
# 将⽂件指针移动到5处
f.seek(5)
ll())  # 5
# 将⽂件指针向后移动5个数据
f.seek(5, 1)
ll())  # 10
# 将⽂件指针移动到倒数第10处
f.seek(-10, 2)
ll())
ad(1))  # d
上⾯程序⽰范了使⽤ seek() ⽅法来移动⽂件指针,包括从⽂件开头、指针当前位置、⽂件结尾处开始计算。运⾏上⾯程序,结合程序输出结果可以体会⽂件指针移动的效果。这⾥还是要推荐下⼩编的Python学习喂鑫*(同⾳):‘’七六⼆,四五九,五⼀零‘’不管你是⼩⽩还是⼤⽜,⼩编我都欢迎,不定期分享⼲货,包括⼩编⾃⼰整理的⼀份2021最新的Python资料和0基础⼊门教程,欢迎初学和进阶中的⼩伙伴。在不忙的时间我会给⼤家解惑。
当⽂件指针位于哪⾥时,程序就会读取哪个位置的数据;当程序读取多少个数据时,⽂件指针就会⾃动向后移动多少个位置。
输出内容
⽂件对象提供的写⽂件的⽅法主要有两个:
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 字符集保存的。这⾥还是要推荐下⼩编的Python学习喂鑫*(同⾳):‘’七六⼆,四五九,五⼀零‘’不管你是⼩⽩还是⼤⽜,⼩编我都欢迎,不定期分享⼲货,包括⼩编⾃⼰整理的⼀份2021最新的Python资料和0基础⼊门教程,欢迎初学和进阶中的⼩伙伴。在不忙的时间我会给⼤家解惑。
从上⾯的程序可以看到,当使⽤ w+、wb+ 模式打开⽂件时,会导致⽂件内容被清空。因此,⽆论程
序运⾏多少次,其输出的⽂件内容都只保留最近⼀次的输出数据。如果程序希望在⽂件后⾯追加内容,则应该使⽤ a+ 或 ab+ 模式。例如如下程序:
writelines()方法将什么写入文件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 ⽂件的内容就会越多。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。