• Python文件操作,异常语法


    1.文件

    2.异常

    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() #从文件中读取单独一行。
    '''字符串结尾会自动加上一个换行符 ,只有当文件最后没有以换行符结尾时,这一操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,表示到达率文件末尾,如果是空行,就会描述为 ,一个只有换行符的字符串。
    '''

    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()
    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就没有意义了,根据实际中的需求来选择。
    所有错误类型都继承自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

     

    #1.定义一个函数,读取 reform.txt 的内容。
    #  把文件reform.txt中的名人名言,改成“某某说:......”的形式,保存到另一个文件中。
    '例:雨果说:大胆是取得进步所付出的代价。'
    
    #reform.txt
    '''
    大胆点,伟大无比的力量自会来帮助你。——比锡耳王
    
    大胆是取得进步所付出的代价。——雨果
    
    不怕的人前面才有路。——有岛武信
    
    世界是属于勇敢者的。——哥伦布
    
    走自己的路,叫别人去说吧。——但丁
    
    死是每个人都能做到的,拿出勇气活下去才是勇敢。——罗教·柯迪
    
    人的一生中可能犯的错误,就是经常担心犯错误。——哈伯德
    
    没有比害怕本身更害怕的了。——培根
    
    你怕狼,就别到树林里去。——列宁
    
    人生自古谁无死,留取丹心照汗青。——文天祥
    '''
    
    fr = open('reform.txt','r')
    fw = open('new.txt','w')
    
    li = fr.readlines()
    
    for line in li[::2]:
        line = line.replace('
    ','说:')
        li_new=line.split('——')
        s = '%s%s
    
    '%(li_new[1],li_new[0])
        fw.write(s)
        print(s)
    fw.flush()
    fw.close()
    fr.close()
      
    
    
    #2. 捕捉用户输入时异常,确保程序正常执行
    
    import random
    
    def test():
        n = random.randint(1,10)  
        c = 0
        while c<3:
            a = input('您还有 %d 次机会,请输入1-10 整数:'%(3-c))
            try:
                a = int(a)
                if 1<=a<=10:
                    if a==n:               
                        print('猜对啦')
                        break
                    elif a < n:
                        print('小啦')
                    else:
                        print('大啦')
                else:
                    print('输入错误!!!')
                c += 1
            except ValueError:
                print('错误!输入不是1-10整数')
    
    test()
    

      

  • 相关阅读:
    【转】进程与线程的一个简单解释
    折半查找
    BOJ 89 统计时间间隔
    BOJ 88 最值问题
    BOJ 87 日期
    QT杂记(网上资料整理而成)
    我的博客园
    【制作镜像】virsh
    【培训】MySQL
    ERROR 1045 (28000): Access denied for user 'root'@'localhost'
  • 原文地址:https://www.cnblogs.com/xcjldtp/p/8547358.html
Copyright © 2020-2023  润新知