zoukankan      html  css  js  c++  java
  • 文件、异常、文件的输入输出

    一、文件操作

      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可以得到系统给出的报错信息
    '

     

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/changshen/p/8664325.html
Copyright © 2011-2022 走看看