文件操作
首先新建一个文件 比如 模特主妇护士班主任.txt
计算机想要访问这个文件需要经历的步骤是:
1、文件路径:d:\模特主妇护士班主任.txt
2、编码方式:utf-8 gbk ....
3、操作方法:只读、只写、追加、读写、if 写读....:
4、以什么编码方式储存的文件,就以什么编码方式打开进行操作。
什么是绝对路径和相对路径?
绝对路径是文件直接存储在计算机的硬盘里,比如直接存储在C盘里、D盘里或是E盘里;
相对路径是文件没有直接存储在计算机的硬盘里,比如存储在C盘里的一个文件夹中等。
文件编码
f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,
在windows下是gbk,在linux下是utf-8。
f = open('模特主妇护士班主任',mode='r',encoding='utf-8')
只读文件:'r'代表只读方式 'rb'直接编码成bytes类型(非文字文件,还有就是上传和下载)
1.读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容
f = open('模特主妇护士班主任',mode='r',encoding='utf-8') content = f.read()print(content)f.close()
2.读一部分内容:read(n),指定读n个单位
print(f.read(5))
3.读文件的第三种方式:按照行读,每次执行readline就会往下读一行
print('readline : ',content.strip()) #strip去掉空格、制表符、换行符content2 = f.readline()print(content2.strip())print(1) #--> 1\nprint('1\n') #--> 1\n\n
4.读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表
content = f.readlines()print('readlines : ',content)
5.读:最常用 for循环
f = open('模特主妇护士班主任,encoding='utf-8')for l in f: print(l.strip())
关闭文件 f.close() 必须在程序最后加上这个,可以清理内存。
f = open('模特主妇护士班主任',mode='rb',)content = f.read()print(content)f.close()
只写文件:只写:w 没有此文件,就会创建文件
#对于w:没有此文件就会创建文件f = open('log',mode='w',encoding='utf-8')f.write('骑兵步兵')f.close()先将源文件的内容全部清除,在写。f = open('log',mode='w',encoding='utf-8')f.write('附近看到类似纠纷')f.close()f = open('log',mode='w+',encoding='utf-8')f.write('aaa')f.seek(0)print(f.read())f.close()f = open('log',mode='wb')f.write('附近看到类似纠纷'.encode('utf-8'))f.close()
追加
f = open('log',mode='a',encoding='utf-8')f.write('佳琪')f.close()f = open('log',mode='a',encoding='utf-8')f.write('佳琪')f.close()
# 带+号的增加有附带功能,比如r+代表在只读的情况下增加了写的功能,代表先读后写,其余的情况类似。
其他功能详解
obj = open('log',mode='r+',encoding='utf-8')content = f.read(3) # 读出来的都是字符f.seek(3) # 是按照字节定光标的位置f.tell() 告诉你光标的位置print(f.tell())content = f.read()print(content)f.tell()f.readable() # 是否刻度line = f.readline() # 一行一行的读line = f.readlines() # 每一行当成列表中的一个元素,添加到list中f.truncate(4)for line in f: print(line)f.close()
seek 是按照字节移动光标
tell 是告诉你目前光标的位置
例题:用户先注册账号和密码到一个文件里,然后等待用户登录,从文件里调出注册的账号和密码与之比较,正确登陆成功,允许有三次错误登陆机会
username = input('请输入你要注册的用户名:')password = input('请输入你要注册的密码:')with open('list_of_info',mode='w',encoding='utf-8') as f: f.write('{}\n{}'.format(username,password))print('恭喜您,注册成功')lis = []i = 0while i < 3: usn = input('请输入你的用户名:') pwd = input('请输入你的密码:') with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line) if usn == lis[0].strip() and pwd == lis[1].strip(): print('登录成功') break else:print('账号和密码错误') i+=1
总结:
# 文件处理 # 打开文件 #open('路径','打开方式','指定编码方式') # 打开方式 r w a r+ w+ a+ b 用的最多就是r w a ,带+号的一般不用,不管是先读后写还是先写后读都会让光标发生变化, # 所以最好读写不要在一起 #r+ 打开文件直接写 和读完再写 # 编码方式 —— utf-8 # 操作文件 # 读 # read 一次性读 # readlines 一次性读 # readline 一行一行读 #不知道在哪儿结束 #视频 图片 rb bytes 按照字节读 # for循环 —— 最好!!! # 写 # write # 光标 —— 文件指针 #seek _ 指定光标移动到某个位置 #tell _ 获取光标当前的位置 #truncate _ 截取文件 # 关闭文件 #close
修改文件实例
修改文件
思路:把原有文件的内容先修改,然后把修改后的文件全部放在一个新的空文件里,把原文件删除
with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2: for line in f: if '星儿' in line: #班主任:星儿 line = line.replace('星儿','啊娇') #写文件 f2.write(line) #小护士:金老板import osos.remove('小护士班主任') #删除文件os.rename('小护士班主任.bak','小护士班主任') #重命名文件