第八节课 文件、异常、文件的输入输出
一、文件操作
1、编码问题
gbk :汉字编码,cp936(另一个名字),汉字占2个字节
utf-8: unicode,汉字占3个字节
ascll码: Mac默认的编码
2、open函数
open(file,mode='r',......) #前面一个必备参数是输入文件,后面的mode是打开方式
3、相对路径和绝对路径
f=open('abc.txt','w') #在py文件旁边创建了一个txt文件,在文件的同一层创建文件,这边是相对路径 f=open('E:\software\python3\lucky.txt,'w') #具体到什么位置,这边是绝对路径 f是一个文件流(输入输出流)
4、文件的打开模式
r #只读模式,文件不存在时会报错 w #写入模式,文件存在会清空之前的内容,文件不存在会新建文件 x #写入模式,文件存在会报错,文件不存在会新建文件 a #追加写入模式,不清空之前的文件,直接将写入的内容添加到后面 b #以二进制模式读写文件,wb、rb、ab + #可读写模式,r+、w+、x+、a+,这几种模式还遵循r、w、x、a的基本原则
w
f=open('abc.txt','w') #操作以后会将原文件的内容清空,若不存在文件,则会新建文件,w+情况下会遵循w的基本原则
r
f=open('a.txt','r') #r模式是只读模式,文件不存在则会报错,前提是文件必须存在
x
f=open('abc.txt','x') #文件存在就会报错,文件不存在就会新建文件
a
f=open('abc.txt','a') #不清空原文件内容,直接要写入的内容添加到后面
b
f.write(b'abcd') #在用b的时候必须在输入内容前放一个b,后面必须是以二进制形式
5、文件的读取
f.read()
要读取文件,先要打开一个文件: f=open('abc.txt','r') 然后读取文件: f.read() 以字符串的形式读取出来,换行用\n形式书写 若再读取一遍 f.read() 输出: '' #原因是读取过一遍后指针(光标)到了读完以后的点,再往后面读的话就是空的字符串 f.seek(0,0) #光标位置,前面一个参数表示偏移量,后面一个参数表示起始位置,默认起始位置为0,可以表示为f.seek(0),可以重置光标
f.readline()
f.readline() #将第一行的内容以字符串的形式读取出来,包括换行\n f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容
6、文件的写入
f.write
f=open('abc.txt','a+') f.write('liugang') #返回输入内容的长度 f.flush() #将上面的内容冲刷进去 f.readlines() #括号里面必须是以字符串元素组成的序列类型(列表,元组)写进去,换行\n需要自己写进去 f.flush()
7、光标位置
f.tell() #返回光标在文件中的位置 f.seek(offset,from) #常用f.seek返回其实起始位置
8、 查看文件信息
f.closed #查看文件是否已经关闭,返回布尔值 f.mode #返回(查看)文件打开模式 f.name #返回(查看)文件名
9、with 形式打开文件,里面的语句执行完后会自动关闭文件
with open('文件名','w') as f: f.write('abcde')
返回:5
文件能够自己冲刷和关闭
二、异常语法
1、try
a b=1 运行时会出现a未被定义的语法错误,随后b=1也不再运行,用下面的测试错误后,b=1就可以被调用了 try: a except NameError: #名字错误 print('执行这个1错误的补救') except TypeError: #类型错误 print('执行这个2错误的补救') except Exception: #这个是错误的总目录 print('可能是其他的错误') else: #没有错误 print('我没错') finally: print('无论如何我都会执行') f.close #关闭文件
try fun() except Exception: #错误总目录被执行后,下面的分目录就不会执行了 print('执行这个错误') 。。。 else: pass finally: pass
try: a=input('输入数字:') if a.isdigit(): print(a) else: raise TypeError #自己把错误揪出来 except Exception: print('请遵守游戏规则')
2、assert 断言
assert 1==1 #测试1-==1这个代码是不是错的,没错没有返回值,错了返回错误点及原因
三、作业
1、定义一个函数,读取 reform.txt 的内容。把文件reform.txt中的名人名言,改成“某某说:......”的形式,保存到另一个文件中。
思路:先定义一个函数,一个读取reform.txt,另一个为另存为的文件,先用f.readlines()读取出来,读取出来是一个列表,然后就可以进行切片,替换,换位等操作,再将结果写入新文件,冲刷上去后关闭
def change_file(): #定义函数 f=open('reform.txt','r') #只读该文件 f1=open('1.txt','w+') #读写新文件 li=f.readlines() #读取原文件 for i in li[::2]: #建立循环,以切片后的列表内每个索引 a,b=i.split('。——') #分割字符串 b=b.replace('\n','说:') #替换\n c=b+a+'\n\n' #字符串拼接 f1.write(c) #写入新文件 f1.flush #冲刷 f1.close #关闭新文件
2、捕捉用户输入时异常,确保程序正常执行
import random def test(): n = random.randint(1,10) c = 0 while c<3: a = input('您还有 %d 次机会,请输入1-10 整数:'%(3-c)) try: #为新加项,测试a不是数字的情况 a = int(a) if 1<=a<=10: if a==n: print('猜对啦') break elif a < n: print('小啦') else: print('大啦') else: print('输入错误!!!') except ValueError: #可能会出现的报错 print('请遵守游戏规则') #输出该问题的输出 c+= 1 if c==3: t=input('您的机会已经用尽,是否还继续 (y:继续 任意键: 结束): ') if t=='y': c = 0