博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.文件的输入输出、异常
阅读量:5057 次
发布时间:2019-06-12

本文共 7196 字,大约阅读时间需要 23 分钟。

1.文件的输入输出

#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() #从文件中读取单独一行。'''字符串结尾会自动加上一个换行符\n,只有当文件最后没有以换行符结尾时,这一操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,表示到达率文件末尾,如果是空行,就会描述为\n,一个只有换行符的字符串。'''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高级专题\test.txt','w') "" f = open('E:\\16班基础\\5高级专题\\test.txt','w') "path = r'E:\16班基础\5高级专题\test.txt' " f = open(path,'w') "# 
文件类 / 流类### 操作'''打开 ,关闭 ,写入 ,读取'''" 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

2.异常语法

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就没有意义了,根据实际中的需求来选择。所有错误类型都继承自BaseExceptionhttps://docs.python.org/3/library/exceptions.html#exception-hierarchy'''#注意:如果抛出父类异常,在子类不会再获取,如下:try:    fun()except Exception as e:    raise Exceptionexcept ImportError as e:    raise ImportErrorfinally:    pass    '''在上面的例子中,下面的ImportError就不会被抛出,应为ImportError继承Exception,但是可以把Exception放在后面是可以的e可以得到系统给出的报错信息'''assert #断言'''测试表示式,其返回值为假,就会触发异常'''assert 1==1     #没有返回值assert 1==2     #返回AssertionError

example:

#异常语法,  (为了让错误,不影响程序运行)(如果报错了,选择性的弥补)try:    b = 3    d = 2    b % d   # NameErrorexcept 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>2assert 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('\n','')        print(who+'说:'+said+'\n\n')        change.write(who+'说:'+said+'\n\n')
View Code

 

#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:    nexcept 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.widthexcept 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捕捉异常,在肯定不会出错的地方就不用了,所以应该选择下面的写法'''
View Code

 

转载于:https://www.cnblogs.com/woaixuexi9999/p/9215666.html

你可能感兴趣的文章
事件冒泡
查看>>
JavaScript中常见的数组操作函数及用法
查看>>
解决vs2010调试很慢的方法
查看>>
程序员的鄙视链
查看>>
Service简介 demos
查看>>
influxdb
查看>>
#019 还未搞明白的C语言问题
查看>>
Java-面向对象篇2
查看>>
【编程练习】寻找和为定值的多个数
查看>>
Eclipse中修改Tomcat的发布路径、发布方式、启动超时等信息
查看>>
设计模式——2.简单工厂模式
查看>>
(转)详细解析Java中抽象类和接口的区别
查看>>
php js 排序
查看>>
算法训练 Anagrams问题
查看>>
java BigInteger
查看>>
hdu 4927 Java大数
查看>>
Open vSwitch安装及配置
查看>>
docker 在windows7 、8下的安装
查看>>
代码审计_urldecode二次编码绕过
查看>>
L2-032 彩虹瓶——栈
查看>>