#1.打开文件 open 函数 open(file,[option]) #file 是要打开的文件 #option是可选择的参数,常见有 mode 等 #2.文件的打开模式 r 只读模式,文件不存在时会报错。 w 写入模式,文件存在会清空之前的内容,文件不存在则会新建文件。 x 写入模式,文件存在会报错,文件不存在则会新建文件。 a 追加写入模式,不清空之前的文件,直接将写入的内容添加到后面。 b 以二进制模式读写文件,wb,rb,ab。 + 可读写模式,r+,w+,x+,a+,这几种模式还遵循了r,w,x,a的基本原则。 #3.文件的读取 f.read(size) #读取文件的内容,将文件的内容以字符串形式返回。 '''size是可选的数值,指定字符串长度,如果没有指定size或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时就会产生问题,反之就尽可能大的size读取和返回数据,如果到了文件末尾,会返回空字符串。 ''' f.readline() #从文件中读取单独一行。 '''字符串结尾会自动加上一个换行符 ,只有当文件最后没有以换行符结尾时,这一操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,表示到达率文件末尾,如果是空行,就会描述为 ,一个只有换行符的字符串。 ''' f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容。 '''可以通过列表索引的方式将文件的每一行的内容输出。 可以通过for循环迭代输出每一行的信息。 ''' #4.文件的写入 f.write() #将要写入的内容以字符串的形式通过write方法写入文件中。 f.writelines() #括号里必须是由字符串元素组成的序列。 #5.保存和关闭 f.flush() #在读写模式下,当写完的数据想要读取出来时,要先缓存区的内容保存到文件当中。 f.close() #关闭文件。对一个已经关闭的文件进行操作会报错。 #6.光标位置 f.tell() #返回光标在文件中的位置。 f.seek(offset,from) #常用 f.seek(0) 返回起始位置 #在文件中移动文件指针,从from(0代表起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节。 # 常用 f.seek(0,0) 返回起始位置。 其他了解一下 #7.查看文件信息 closed #查看文件是否已经关闭,返回布尔值。 mode #返回文件打开模式。 name #返回文件名。 #8.with 形式打开文件,里面的语句执行完后会自动关闭文件 with open('文件名') as f: f.read()
#open() ''' r 只读模式,文件不存在时会报错。 w 写入模式,文件存在会清空之前的内容,文件不存在则会新建文件。 x 写入模式,文件存在会报错,文件不存在则会新建文件。 a 追加写入模式,不清空之前的文件,直接将写入的内容添加到后面。 b 以二进制模式读写文件,wb,rb,ab。 + 可读写模式,r+,w+,x+,a+,这几种模式还遵循了r,w,x,a的基本原则。 ''' "f = open('test.txt','r') " " f = open('test.txt','w') " ## 默认建立在当前目录 ### 绝对路径 E:16班基础5高级专题 ##贾转义 r " f = open(r'E:16班基础5高级专题 est.txt','w') " " f = open('E:\16班基础\5高级专题\test.txt','w') " path = r'E:16班基础5高级专题 est.txt' " f = open(path,'w') " # <class '_io.TextIOWrapper'> 文件类 / 流类 ### 操作 ''' 打开 ,关闭 ,写入 ,读取 ''' " f = open('test.txt','w') " #以写的方式 ## + 可读写, 在原来的基础上,多加加了项 读写功能 " f = open('test.txt','w+') " " f = open('test.txt','r+') " ### read 操作 "f.read() " #将文件所有内容, 以字符串返回 ,一个 ### f.readline() 返回每一行 " f.readline() " ##引入 文件指针 (光标) ##tell seek " f.tell() " #告诉光标的位置 "f.seek(0) " #重置光标位置 #汉字占两个字节 ''' 编码问题: cp936 = GBK (中文编码), 2字节 UTF-8 国际编码 3字节 ''' #readlines " f.readlines()" #列表方式返回 ,(str) #li = f.readlines() ''' for i in li: print(i) ''' ### 写 write ''' f.write('jianneg') #缓存 f.flush() #将缓存 写入 硬盘 ''' #writelines() li =['jianeng','python','6666','rng'] #f.writelines(li) #li =['jianeng','python','6666','rng',12] #不能有数字 ###文件 属性 #f.closed #f.mode #f.name #f.encoding #8.with 形式打开文件,里面的语句执行完后会自动关闭文件 ''' with open('test.txt','w+') as f: f.write('haha') ''' ##close 的时候,自动flush
try: suite1 #测试语句块 except exception1: suite2 #如果测试语句suite1中发生exception1异常时执行 except (exception2,exception3): suite3 #如果测试语句suite1中发生元组中任意异常时执行 except exception4 as reason: #as把异常的原因赋值给reason suite4 #如果测试语句suite1发生exception4的异常时执行 except: suite5 #如果测试语句suite1发生异常在所列出的异常之外时执行 else: suite5 #如果测试语句块suite1中没有发生异常时执行 finally: suit6 #不管测试语句suite1中又没有发生异常都会执行 ''' 注意:中间的except,else,finally都是可选的,但至少有一个,不然try就没有意义了,根据实际中的需求来选择。 所有错误类型都继承自BaseException https://docs.python.org/3/library/exceptions.html#exception-hierarchy ''' #注意:如果抛出父类异常,在子类不会再获取,如下: try: fun() except Exception as e: raise Exception except ImportError as e: raise ImportError finally: pass ''' 在上面的例子中,下面的ImportError就不会被抛出,应为ImportError继承Exception,但是可以把Exception放在后面是可以的 e可以得到系统给出的报错信息 ''' assert #断言 ''' 测试表示式,其返回值为假,就会触发异常 ''' assert 1==1 #没有返回值 assert 1==2 #返回AssertionError
example:
#异常语法, (为了让错误,不影响程序运行)(如果报错了,选择性的弥补) try: b = 3 d = 2 b % d # NameError except TypeError: #同级 print('你的类型错误') except NameError: print('没有定义') except ValueError: print('值错误') except Exception: print('b % d,报错了') else: #当try 里面没有 报错,就执行 else print('没有问题') finally: print('不管你报不报错,我都要执行') try: f = open('test.txt','w') f.read() except Exception: print('文件操作有误') finally: f.close() print(f.closed) a = 1 # raise 故意报错,显性的引发异常 try: a = input('输入数字: ') if a.isdigit(): print('输入成功',a) else: raise TypeError #报错,TypeError except TypeError: print('类型错误') except Exception: print('您输入有误') # assert #断言 返回False 就弹出异常 ''' assert 1>2 assert isinstance(1,(str,int)) assert isinstance(1,(str,float)) '''
3.作业
#1.打开文件,修改内容,写入另一个文件。 # 把文件reform.txt中的名人名言改成“某某说:......”的形式保存到另一个文件中。 '例:雨果说:大胆是取得进步所付出的代价。'
reform.txt内容如下
大胆点,伟大无比的力量自会来帮助你。——比锡耳王 大胆是取得进步所付出的代价。——雨果 不怕的人前面才有路。——有岛武信 世界是属于勇敢者的。——哥伦布 走自己的路,叫别人去说吧。——但丁 死是每个人都能做到的,拿出勇气活下去才是勇敢。——罗教·柯迪 人的一生中可能犯的错误,就是经常担心犯错误。——哈伯德 没有比害怕本身更害怕的了。——培根 你怕狼,就别到树林里去。——列宁 人生自古谁无死,留取丹心照汗青。——文天祥
def read(): f = open('reform.txt','r') change = open('change.txt','r+') li = f.readlines() li = li[::2] for i in li: said,who = i.split('——') who = who.replace(' ','') print(who+'说:'+said+' ') change.write(who+'说:'+said+' ')
#2.针对实例化矩行类时,输入字符串等错误参数,写一个提示异常。 ''' class Rectangle: def __init__(self,length,width): if isinstance(length,(int,float)) and isinstance(width,(int,float)): #if ( type(length) == int or type(length) == float ) and (type(width) ==int or type(widh) == float): self.length = length self.width = width else: return 'ERROR' def area(self): return self.length * self.width ''' ''' try: n except Exception: print(Exception) '''
#方法一 raise 相当于return ,将程序结束,并且返回一个异常 ''' class Rectangle: def __init__(self,length,width): if isinstance(length,(int,float)) and isinstance(width,(int,float)): #if ( type(length) == int or type(length) == float ) and (type(width) ==int or type(widh) == float): self.length = length self.width = width else: #return 'ERROR' raise TypeError('请输入int,float') def area(self): return self.length * self.width ''' #方法二 assert ''' class Rectangle: def __init__(self,length,width): assert isinstance(length,(int,float)) and isinstance(width,(int,float)) self.length = length self.width = width def area(self): return self.length * self.width ''' #方法三 try except ''' try: class Rectangle: def __init__(self,length,width): if isinstance(length,(int,float)) and isinstance(width,(int,float)): #if ( type(length) == int or type(length) == float ) and (type(width) ==int or type(widh) == float): self.length = length self.width = width else: return 'ERROR' #raise TypeError('请输入int,float') def area(self): return self.length * self.width except Exception: print(Exception) ''' ''' class Rectangle: def __init__(self,length,width): try: if isinstance(length,(int,float)) and isinstance(width,(int,float)): #if ( type(length) == int or type(length) == float ) and (type(width) ==int or type(widh) == float): self.length = length self.width = width else: raise TypeError #1/0 except TypeError: raise TypeError def area(self): return self.length * self.width 以上两种try except,哪种好呢。一般我们在可能报错的时候,再插入try except捕捉异常,在 肯定不会出错的地方就不用了,所以应该选择下面的写法 '''