美文网首页
文件、异常

文件、异常

作者: Python野路子 | 来源:发表于2018-01-01 20:07 被阅读0次

    编码问题

    '''
    GBK 汉字编码 cp936 汉字2字节 windows默认
    Unicode(utf-8) 国际通用编码 python默认 Linux默认
    ASCLL mac默认的
    '''

    文件的输入输出

    打开文件open函数
    open(file,[option])
    file 是要打开的文件,option是可选择的参数,常见有 mode 等

    文件的打开模式

    '''
    r 只读模式,文件不存在时会报错。=>>FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
    w 写入模式,文件存在会清空之前的内容,文件不存在则会新建文件
    x 写入模式,文件存在会报错,文件不存在则会新建文件。 FileExistsError: [Errno 17] File exists: 'test.txt'
    a 追加写入模式,不清空之前的文件,直接将写入的内容添加到后面。
    b 以二进制模式读写文件,wb,rb,ab。
    + 可读写模式,r+,w+,x+,a+,这几种模式还遵循了r,w,x,a的基本原则。
    '''

    文件的读取

    f.read(size) #读取文件的内容,将文件的内容以字符串形式返回。
    '''
    size是可选的数值,指定字符串长度,如果没有指定size或者指定为负数,
    就会读取并返回整个文件。当文件大小为当前机器内存两倍时就会产生问题,
    反之就尽可能大的size读取和返回数据,如果到了文件末尾,会返回空字符串。
    '''
    f.readline() #从文件中读取单独一行。只返回一行
    '''
    字符串结尾会自动加上一个换行符\n,只有当文件最后没有以换行符结尾时,
    这一操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,
    表示到达率文件末尾,如果是空行,就会描述为\n,一个只有换行符的字符串。
    '''
    f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容。
    '''
    可以通过列表索引的方式将文件的每一行的内容输出。
    可以通过for循环迭代输出每一行的信息。
    '''

    文件的写入

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

    保存和关闭

    f.flush()
    在读写模式下,当写完的数据想要读取出来时,要先缓存区的内容保存到文件当中。
    f.close()
    关闭文件。对一个已经关闭的文件进行操作会报错。
    flush/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()
    ---------->----------->----------->----------->

    异常语法

    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
    '''
    a % 2 =》NameError: name 'a' is not defined #报错,程序就不能继续运行下去了

    try:
      a%2
    except NameError:
      print('error')
    except TypeError:
      print('你们找不到的错误交给我')
    else:
      print('我这个代码没毛病')
    finally:
      print('不管怎样都执行的语句')

    raise 引发一个异常

    在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称
    try:
      a = input('输入数字:')
      if a.isdigit():
        print(a)
      else:
        raise TypeError
    except Exception:
        print('请你遵循游戏规则')

    assert

    assert 断言 测试代码
    '''
    测试表示式,其返回值为假,就会触发异常
    '''
    assert 1==1 #没有返回值
    assert 1==2 #返回AssertionError
    python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。

    作业

    1.打开文件,修改内容,写入另一个文件。
    把文件reform.txt中的名人名言改成“某某说:......”的形式,保存到另一个文件中。
    '例:雨果说:大胆是取得进步所付出的代价。'


    image.png
    1. 捕捉用户输入时异常,确保程序正常执行


      image.png

    相关文章

      网友评论

          本文标题:文件、异常

          本文链接:https://www.haomeiwen.com/subject/kvgtnxtx.html