【python 文件操作】python 文件操作
计算机由软件、系统、硬件组成。
python或其他语言编写的应用程序如果想要把数据永久保存下来,需要把数据写到硬盘上面,这就涉及到应用程序操作硬件,众所周知,程序无法直接操作硬件,这就用到了操作系统。系统 把复杂的硬件操作封装成简单的接口/应用程序使用,其中文件就是操作系统供给程序操作硬盘的虚拟概念,用户或应用程序操作文件,可以将数据永久保存下来
文件的操作步骤:
1、打开文件,并返回一个语句柄并赋值一个变量
2、通过返回的语句柄操作文件
3、关闭文件
# 打开文件,得到语句柄赋值给一个变量
f = open("test.txt", 'w', encoding = "utf-8")
#对文件操作
f.write("11111")
#关闭文件
f.close()
#1、应用系统向操作系统发起一个open(。。。。)
#2、操作系统打开该文件,并返回一个语句柄
#3、应用程序把语句柄赋值给一个变量
#打开一个文件包含两个资源:一个是操作系统级打开文件,另一个为应用程序变量,操作完一个文件后需要把与该文件这两部分资源全部回收,
第一种方法:f.close()
第二种方法:del f
f.close(),一定要在del f 之前,否则系统打开的文件没有关闭,白白占用资源。python有垃圾自动回收机制,无需考虑del f
最好的方法可以使用with open(‘test.txt’,'w')as f:
pass
with open('test.txt','r') as read_f ,open('tate.txt','r') as write_f:
data = read_f.read()
write_f.write(data)
文件以什么编码编写,需要使用对应的编码打开
文件打开模式(默认文本模式):
r :默认读模式【默认模式,文件必须存在,否则报错】
w:只写模式【不存在则创建,存在则清空内容】
a:只追加写模式【不可读,不存在者创建,存在则只追加内容】
以上只适用文本模式,如需打开图片、视频、,需要使用b模式打开,表示字节操作(图片、视频,是以字节编码存储,无需考虑编码方式)
wb
rb
ab
注释:以b模式打开文件,读取内容以字节方式,写入也需要字节方式,不能指定编码
# “+”表示可以同时读写某个文件
r+ :读写【可读、可写】
w+ :写读【可写,可读】
a+ :写读【可读、可写】
x:只写【不可读,不存创建,否则报错】
x+ :写读【可读,可写】
read(3),文本模式:读取三个字符串,b模式:3个字节、
光标:
seek(0),tell,truncate()都是一字节单位:
seek 有三种方式0,1,2,其中1,2必须在b模式下进行,truncate截断文件,不能以w/w+ 进行,那样会清空文件,请在r+/a/a+ 模式下进行。
with的方便之处:在于防止打开文件,而忘记关闭
文件的修改有两种方法,第一种:一次性读出,操作后,然后在写入另外一个文件。然后把之前的文件删除,被写入的文件重命名为删除的文件名称
第二种:可以一行一行读入然后修改,修改后保存至另外一个文件内
文件操作:流程
找到——>以什么方式打开——>操作——>关闭
f = open('test',"w")
1、读文件的方式(从文件中获取的内容都是字符串):
一、read 方法,一次性的读出文件所有内容
二、f.read(5)独一部分,读五个字符、换行符也算
三、readline、按照行读,每次执行readline 就会读下一行
四、readlines、返回一个列表,将列表中每一行作为列表的元素返回一个列表
strip()去掉空格、制表符、换行符
五、for循环:for i in f:
print(i)
文件的 r+ :
r+ 有两种方式,
(1)先写后读
#text内容:this is a turncate test,*** f= open('text.txt', 'r+',encoding="utf-8") f.write('人') print("一",f.read()) f.close() f= open('text.txt', 'r+',encoding="utf-8") print('二',f.read()) #输出结果: 一 s is a turncate test,*** 二 人s is a turncate test,***
通过上面的输出结果就可以看出,文件的r+模式,先写后读模式:(1)从头开始写,而且是按照字节的方式修改。“this”是四个字节,“人”中文字符占三个字节(2)先写后读的模式,修改后紧接着输出,输出的内容和保存后修改的内容不同。
(2)先读后写(追写)
会按照追加的模式进行写入。
Python中没有方法去修改文件
(3)truncate:保留指定字节之前的内容
obj1 = open('text.txt','r+') obj1.write('this is a truncate test,***') obj1.seek(0) print ('first read:\n',obj1.read()) obj1.truncate(5) obj1.close()