目录
什么是文件
文件是操作系统提供的读和写的虚拟文件,文件的操作基于文件,文件的核心操作就是读和些
为什么要有文件
内存无法永久保存数据,当数据需要被永久保存的时候,由操作系统将文件转换为二进制文件转而保存至硬盘,从而实现对文件的操作
如何用文件
文件读取
当我们需要打开文件的时候,需要想操作系统发送请求,有操作系统发送给CPU
各种操作系统资源占有等信息,python
中用open()
函数打开文件. 格式通常为open(r'/Users/mac/desktop/32.txt',mode= 'r',encoding = utf8)
打开文件的目的是为了去读和写
文件写入
open(r'/Users/mac/desktop/32.txt',mode= 'w',encoding = utf8)
当文件的打开模式为write
写模式时,文件原数据会被清空掉,直接从头开始写入
总结
文件打开分为三步
- 打开文件
- 读写
- 关闭
绝对路径相对路径
- 绝对路径的意思:从根目录开始,一直到文件所在位置
- 相对路径:和相对对象在同级目录的下面
文件的三种打开方式
r模式
:r模式打开文件为只读w模式
:w模式打开文件为只写(如果没有原文件则会新建,如果有原文件会清除原文件a模式
:a模式打开文件会在末尾位置写入内容,如果没有的话,会直接新建文件,在文件后面写入内容b模式
:b模式是通用的模式,因为所有的文件在硬盘中都是以二进制文件来存储的,需要注意的是:b模式读写文件,不一定能加上encoding参数,因为二进制无法再编码
try:
import requests
response = requests.get(
'http://images.cnblogs.com/cnblogs_com/nickchen121/1447696/o_文件的三种打开模式-mv.jpg')
data = response.content
)
f = open('mv.jpg', 'wb')
f.write(data)
print('done...')
f.close()
except Exception as e:
print(e,'报错了,那就算了吧,以后会学到的')
with管理文件操作上下文
之前我们用open()方式打开文件,但是open打开文件之后还需要手动关闭文件去释放内存,这里python解释器提供了上下文管理工具---with open()
with open('32.txt','rt',encoding = 'utf8') as f:
print(f.read)
with open()函数会自己判断文件是否执行完闭,自己关闭文件释放内存占用,并且with open()可以一次性打开多个文件,之间用逗号隔开.
文件高级应用
可读可写(一般不推荐使用)
-
r+t
:可读可写 -
w+t
:可写可读 -
a+t
:可追加可读
文件内指针的移动
当我们需要文件内容中间的某一行增加内容,如果仅仅是基于可读可写的操作上,是很难实现的
seek(offset,whence)
seek(offset,whence)
:offset代表文件指针的偏移量,单位是字节
with open('11.txt',mode='rt',encoding='utf8') as fr:
print(f'fr.seeka(4,0):{fr.seek(3,0)}') # 0相当于文件的开头位置,1相当于文件所在位置,2相当于文件末尾
tell()
tell()
:每次统计都是从文件开头到当前指针所在位置
read()
read(n)
:只有在该模式下,n代表的是字符个数,除此之外,其他涉及到指针的都是字节个数
with open('11.txt','rt',encoding = 'utf8') as fr:
print(f'fr.read(3):{fr.read(3)}')
truncate()
truncate()
:是截断文件,所以文件的打开方式必须是可写,但不能用w或w+等方式打开,因为那样会直接清空文件,所以truncate()
要在r+
或a+
等模式下测试效果.它的参照物永远是文件头,并且truncate()
不加参数,相当于清空文件
with open('11.txt','r+t',encoding='utf8')
fr.truncate(3)
修改问件内容的两种方式
方式一:一次性读取所有
将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,载由内存覆盖到硬盘
import os
with open('11.txt') as fr,\
open('11_swap.txt,'w') as fw:
data = fr,read()
data = data.replace('thank', 's')
fw.write(data)
os.remove('11.txt')
os.rename('11_swap.txt','11.txt')
print ('done...')
放式二:逐行读取
将硬盘存放的该文件内容一行一行的读入内存,修改完毕就写入新文件,最后用新文件覆盖原文件
import os
with open('2.txt') as fr,\
open('2_swap.txt','w') as fw:
for line in fr:
line = line.replace('jason', 'jasonSB')
fw.write(line)
os.remove('2.txt')
os.rename('2_swap.txt','2.txt.)
print('done...')
总而言之:修改文件的内容思路为:以读的方式打开原文件,以写的方式打开一个原文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,将原文件删除,重命名新文件为原文件的文件名,达到修改的目的