第六篇.文件处理
一.文件操作
1.1介绍
计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序 是无法直接操作硬件的,这就用到了操作系统.操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给 应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来.
操作文件的流程
1. 打开文件,得到文件句柄并赋值给一个变量 2. 通过句柄对文件进行操作 3. 关闭文件
1.2python中
#1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作 data=f.read() #3. 关闭文件 f.close()
1.3f=open('a.txt','r')的过程分析
1、由应用程序向操作系统发起系统调用open(...) 2、操作系统打开该文件,并返回一个文件句柄给应用程序 3、应用程序将文件句柄赋值给变量f
1.4打开文件所需的资源
打开文件需要两方面资源,操作系统把文件打开,应用程序要拿到这个变量
二.打开文件的字符编码
#默认的打开文件的编码是:当前操作系统默认的编码,win:gbk,linux:utf-8 f=open('a.txt',mode='r',encoding='utf-8') print(f.read()) f.close()
三.文件的打开模式
3.1文件打开的r模式
r:默认的打开模式,只读模式
注意:当文件不存在时,报错
f=open('a.txt',mode='r',encoding='utf-8') #mode='rt' # f.write('哈哈啊哈哈啊啊 啊啊123213213123\n') #抛出异常,不能写 # print(f.readable()) print('=============>1') print(f.read()) print('=============>2') print(f.read()) f.close() f=open('a.txt',mode='r',encoding='utf-8') #mode='rt' print(f.readline(),end='') print(f.readline(),end='') print(f.readline(),end='') f.close() f=open('a.txt',mode='r',encoding='utf-8') #mode='rt' print(f.readlines()) f.close() with open('a.txt',encoding='utf-8') as f: for line in f: print(line,end='') print(f.readlines()) for line in f.readlines(): #循环文件不要使用该方式,因为在文件过大的情况下有可能会撑爆内存 print(line,end='')
3.2文件打开的w模式
w:只写模式 注意 1、当文件存在时,清空 2、当文件不存在时,创建空文档
f=open(r'a1.txt',mode='w',encoding='utf-8') #默认是wt # f.write('第一行\n') # f.write('第二行\n') # f.writelines(['111111\n','222222\n','333333\n']) f.write('aaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbb\nccccccccccccccc\n') f.close()
3.3文件打开的a模式
a:只追加写模式
注意:
在文件不存在时,创建空文件
在文件存在时,光标直接跑到文件末尾
f=open('access.log',mode='a',encoding='utf-8') # print(f.writable()) # f.readlines() #报错 f.write('5555555555555\n') f.close()
四.文件内光标的移动
with open('user.txt','r+',encoding='utf-8') as f: f.seek(9) #偏移量的单位是字节 utf-8一个字符3个字节 # print(f.tell()) print(f.read()) with open('user.txt','r+',encoding='utf-8') as f: f.seek(9) #偏移量的单位是字节 # print(f.tell()) f.write('[老男孩第二帅的人]')
五.文件的修改
5.1文件修改的两种方式
#修改文件方式一: #1、先把文件内容全部读入内存 #2、然后在内存中完成修改 #3、再把修改后的结果覆盖写入原文件 #缺点:会在文件内容过大的情况下,占用过多的内存 with open('user.txt',mode='r',encoding='utf-8') as f: data=f.read() data=data.replace('吴佩其','吴佩其[老男孩第二帅的人]') with open('user.txt',mode='w',encoding='utf-8') as f: f.write(data) #修改文件方式二: #1、以读的方式打开原文件,以写的方式打开一个新文件 import os with open('user.txt',mode='rt',encoding='utf-8') as read_f,\ open('user.txt.swap',mode='wt',encoding='utf-8') as write_f: for line in read_f: if '吴佩其' in line: line=line.replace('吴佩其','吴佩其[老男汉特别特别的老]') write_f.write(line) os.remove('user.txt') os.rename('user.txt.swap','user.txt')