目录
文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位。文件的操作是基于文件,即文件的操作核心就是:读和写。也就是只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应用程序对文件的读写操作转换成集体的硬盘指令(比如控制盘片转动,控制机械手臂移动,以此来读取数据)。
内存无法永久保存数据,但凡我们想要永久保存数据都需要把文件保存到硬盘中,而操作文件就可以实现对硬件的操作。
从硬盘中读取数据和写入数据。
readable()、writable()判断文本是否可读或可写,
for i in f:#一行一行读取文件
print(i)
#每一行末尾默认有一个换行
r:read只读模式,只读不可写,文件不存在时会报错,且f.read()一次性读取文件的所有内容,如果文件非常大,会造成内存占满,电脑卡死,因此可以使用f.readline()/f.readlines()读取内容。
f = open('32.txt',mode='r')
f.write()
f.close()#报错
rt:只读不可写encoding指定读入的编码格式
# rt:read by text
# rb:read by bytes这里按照二进制位读取文件,不需要加读入的编码格式
f.read()读取文件指针会跑到文件的末端,如果再一次读取,读到的将会是空格。如果再次读取,只能将文件先关闭再次打开然后读取。
wt:只写不可读,w模式会先清空文件,再进行写入encoding指定写入的编码格式
r、rt | 只读不可写encoding指定读入的编码格式,如果对应的地址没有文件则会报错。 |
---|---|
w、wt | 只写不可读,w模式会先清空文件,如果没有文件会自动创建文件,再进行写入encoding指定写入的编码格式。 |
at | 只写入(追加写入)文件不存在的时候会先创建文件后写入内容。 |
b | 该模式用于读取文件的二进制数,一般用于图片、音频、视频,在读取的时候不能加encoding |
绝对路径:从盘符开始的路径
相对路径:执行文件(当前运行的文件)的文件夹下的文件名
未来写项目尽量用相对路径,执行文件和要编辑的文件放在同一个文件夹下。
with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。
# with提供了一个自动关闭文件机制,with open 下面的文件运行结束之后就会关闭文件。
with open ('test.py',)
r+默认为r+t 把第一个字替换掉,
a+ a模式默认在光标尾部。
这些方法都有一定的弊端,如果你用既可读又可写的形式打开了一个文件,往里头写东西,然后又读,有可能出现读取不到刚写进去的东西,因为写的过程存在时间延迟,如果这时你以为没有写入成功而重新写入一次,就会报错。
在python会有指针的概念但是这里的指针和c语言不同,这里的指针仅指光标的位置,指针在哪里你写的字符就在那里。
with open('36.txt','rb') as fr:
fr.seek(4,0)
print(f"fr.tell():{fr.tell()}")
fr.tell():4
read(n): 这里n代表字符的个数,除此之外,其他地方涉及到指针都是指字节个数。
with open('36.txt','rt',encoding='utf-8') as fr:
print(f"fr.read(3):{fr.read(3)}")
fr.read(3): sdf
方式一
将硬盘中存放的需要修改的文件的内容全部加载到内存,在内存中修改完毕后,再由内存覆盖到硬盘。
import os
with open('34r.txt') as fr,\
open('34r_swap.txt','w') as fw:
data =fr.read()
data = data.replace('tank','tankSB')#在内存中完成修改
fw.write(data)#新文件一次性写入原文件内容
os.remove('34r.txt')
os.rename('34r_swap.txt','34r.txt')
print('done...')
import os
with open('34r.txt') as fr,\
open('34r_swap.txt','w') as fw:
#循环读取内容,逐行修改
for line in fr:
line = line,replace('jason','jasonSB')
#新文件写入原文件修改后文件
fw.write(line)
os.remove('34r.txt')
os.rename('34r_swap.txt','34r.txt')
print('done...')
done...