python文件操作 什么是文件 为什么要有文件 如何用文件 总结 绝对路径相对路径 文件的三种打开方式 with管理文件操作上下文 文件高级应用 修改问件内容的两种方式

文件是操作系统提供的读和写的虚拟文件,文件的操作基于文件,文件的核心操作就是读和些

为什么要有文件

内存无法永久保存数据,当数据需要被永久保存的时候,由操作系统将文件转换为二进制文件转而保存至硬盘,从而实现对文件的操作

如何用文件

文件读取

当我们需要打开文件的时候,需要想操作系统发送请求,有操作系统发送给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写模式时,文件原数据会被清空掉,直接从头开始写入

总结

文件打开分为三步

  1. 打开文件
  2. 读写
  3. 关闭

绝对路径相对路径

  1. 绝对路径的意思:从根目录开始,一直到文件所在位置
  2. 相对路径:和相对对象在同级目录的下面

文件的三种打开方式

  1. r模式:r模式打开文件为只读

  2. w模式:w模式打开文件为只写(如果没有原文件则会新建,如果有原文件会清除原文件

  3. a模式:a模式打开文件会在末尾位置写入内容,如果没有的话,会直接新建文件,在文件后面写入内容

  4. 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()可以一次性打开多个文件,之间用逗号隔开.

文件高级应用

可读可写(一般不推荐使用)

  1. r+t:可读可写
  2. w+t:可写可读
  3. 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模块的方法,将原文件删除,重命名新文件为原文件的文件名,达到修改的目的