• 文件、异常、文件的输入输出


    一、文件操作

      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(r'F:dcache.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,后面必须是以二进制形式   

    f.write() #将要写入的内容以字符串形式通过write方法写入文件中。

      文件的读取

    f.read(sizw)  #读取文件的内容,将文件内容以字符串形式返回。

    f.readline()   #从文件中读取单独一行

    f.readlines()   #一次读取所以,返回一个列表,列表的元素为文件行的内容

    f=open('1ucky.txt','r')
    f.read()
    'aaaa
    bbb
    ccc
    ddd'        
    换行
    
    f.read()   #再读一遍,返回''   #没值了
    
    f.seek(0,0)    #前面一个参数表示一个偏移量,后面一个参数表示起始位置,是默认参数,这个0可以不写
    
    f.read()  #又可以读出来
    
    
    f.readline()
    'aaaa
    '     #读取第一行内行和换行(从文件中单独读取一行)
    f.seek(0,0)
    0
    >>> f.readlines()
    ['aaaa
    ', 'bbb
    ', 'ccc
    ', 'ddd']

    文件写入    2种

    f.write()   #将要写入的内容以字符串行书通过,write方法写入文件中

    f.writelines()   #括号里必须是由字符串元素组成的序列

    f=open('1ucky.txt','a+')
    
    f.write('lingang')
    7
    f.write('lin刚')
    4
    f=open('1ucky.txt','a+')
    f.writelines(['6666
    ','7777'])
    f.flush()
    aaaa
    bbb
    ccccc
    ddd6666
    7777
    f.writelines(['
    ','6666
    ','7777'])
    f.flush()
    
    #要换行前面加
    (要自己写进去)  以序列类型由字符串元素组成序列
    f.tell()  #返回字节
    
    f.seek(10,0)   偏移10个
    10
    f.readline()

    f.closed

    False    #文件还没关

    f.mode

    'a+'  #返回打开文件的模式

    f.name

    'abc.txt'     #打开的文件名

    f.encoding

    'cp936'      #表示什么编码

     
    要读取文件,先要打开一个文件:
    f=open('abc.txt','r')
    然后读取文件:
        f.read()
    以字符串的形式读取出来,换行用
    形式书写
    若再读取一遍
         f.read()
    输出:
        '' #原因是读取过一遍后指针(光标)到了读完以后的点,再往后面读的话就是空的字符串
    
        f.seek(0,0) #光标位置,前面一个参数表示偏移量,后面一个参数表示起始位置,默认起始位置为0,可以表示为f.seek(0),可以重置光标
     

        f.readline()

    f.readline() #将第一行的内容以字符串的形式读取出来,包括换行
    
    
    f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容

      文件的写入

        f.write

     
    f=open('abc.txt','a+')
    f.write('liugang') #返回输入内容的长度
    
    f.flush() #将上面的内容冲刷进去
    
    f.readlines() #括号里面必须是以字符串元素组成的序列类型(列表,元组)写进去,换行
    需要自己写进去
    f.flush()
     

      光标位置

    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
    文件能够自己冲刷和关闭

    异常语法:Exception  hierarchy

    BaseException

    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:
    suite1 #测试语句块
    except exception1: #如果测试语句suite1中发生exception1异常时执行
    suite2

     
    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这个代码是不是错的,没错没有返回值,错了返回错误点及原因

    with 形式打开文件,里面的语句执行完后会自动关闭文件

     

    with open('文件名','w') as f:
        f.write('abcde')
    返回:5
    文件能够自己冲刷和关闭,不需要写flush, #能够自己冲刷和关闭

    文件的写入

     f.write() #将要写入的内容以字符串的形式通过write方法写入文件中。
     f.writelines() #括号里必须是由字符串元素组成的序列。

    保存和关闭

      f.flush()在读写模式下,当写完的数据想要读取出来时,要先缓存区的内容保存到文件当中。

      f.close() 关闭文件。对一个已经关闭的文件进行操作会报错。

    光标位置

      f.tell() 返回光标在文件中的位置。
      f.seek(offset,from) #常用 f.seek(0) 返回起始位置
      在文件中移动文件指针,从from(0代表起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节。
      常用 f.seek(0,0) 返回起始位置。 其他了解一下

    查看文件信息
      closed 查看文件是否已经关闭,返回布尔值。
           mode 返回文件打开模式。
           name 返回文件名。

    with 形式打开文件,里面的语句执行完后会自动关闭文件

      with open('文件名') as f:

        f.read() 

     
     1 try:
     2     a=1
     3 except NameError:
     4     print('我有错')
     5 except TypeError:
     6     print('其实我错了')
     7 except Exception:
     8     print('你们都没错,我错了')
     9 else:
    10     print('啊,代码正确呀')
    11 finally:
    12     print('不管了,我要执行')
     
     
     1 try:
     2     suite1 #测试语句块
     3 except exception1:
     4     suite2 #如果测试语句suite1中发生exception1异常时执行
     5 except (exception2,exception3):
     6     suite3 #如果测试语句suite1中发生元组中任意异常时执行
     7 except exception4 as reason: #as把异常的原因赋值给reason
     8     suite4 #如果测试语句suite1发生exception4的异常时执行
     9 except:
    10     suite5 #如果测试语句suite1发生异常在所列出的异常之外时执行
    11 else:
    12     suite5 #如果测试语句块suite1中没有发生异常时执行
    13 finally:
    14     suit6 #不管测试语句suite1中又没有发生异常都会执行
    15 
    16   
     

      注意:中间的except,else,finally都是可选的,但至少有一个,不然try就没有意义了,根据实际中的需求来选择。

      所有错误类型都继承自BaseException
      https://docs.python.org/3/library/exceptions.html#exception-hierarchy

      注意:如果抛出父类异常,在子类不会再获取,如下:

     
    1 try:
    2     fun()
    3 except Exception as e:
    4     raise Exception
    5 except ImportError as e:
    6     raise ImportError
    7 finally:
    8     pass
     

      在上面的例子中,下面的ImportError就不会被抛出,因为ImportError继承Exception,但是可以把Exception放在后面是可以的

      e可以得到系统给出的报错信息
    '

     

  • 相关阅读:
    CodeForces
    CodeForces
    springboot 入门七-静态资源处理
    springboot 入门六-多环境日志配置
    springboot 入门五-日志一
    springboot 入门四-时间类型处理
    springboot 入门三- 读取配置信息二(读取属性文件方式)
    springboot 入门二- 读取配置信息一
    springboot 入门一 hello world!
    SVN提交小结(转)
  • 原文地址:https://www.cnblogs.com/changshen/p/8664325.html
Copyright © 2020-2023  润新知