• 第八节课 文件、异常、文件的输入输出


    第八节课 文件、异常、文件的输入输出

    一、文件操作

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

      5、文件的读取

        f.read()

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

        f.readline()

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

      6、文件的写入

        f.write

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

      7、光标位置

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

    二、异常语法

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

     三、作业

      1、定义一个函数,读取 reform.txt 的内容。把文件reform.txt中的名人名言,改成“某某说:......”的形式,保存到另一个文件中。

        思路:先定义一个函数,一个读取reform.txt,另一个为另存为的文件,先用f.readlines()读取出来,读取出来是一个列表,然后就可以进行切片,替换,换位等操作,再将结果写入新文件,冲刷上去后关闭

    def change_file():  #定义函数
        f=open('reform.txt','r')  #只读该文件
        f1=open('1.txt','w+')  #读写新文件
        li=f.readlines()   #读取原文件
        for i in li[::2]:   #建立循环,以切片后的列表内每个索引
            a,b=i.split('。——')  #分割字符串
            b=b.replace('
    ','说:') #替换
    
            c=b+a+'
    
    '   #字符串拼接
            f1.write(c)  #写入新文件
            f1.flush  #冲刷
        f1.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不是数字的情况
                a = int(a)
                if 1<=a<=10:
                    if a==n:               
                        print('猜对啦')
                        break
                    elif a < n:
                        print('小啦')
                    else:
                        print('大啦')
                else:
                    print('输入错误!!!')
            except ValueError:  #可能会出现的报错
                print('请遵守游戏规则')  #输出该问题的输出
            c+= 1
        if c==3:
            t=input('您的机会已经用尽,是否还继续 (y:继续   任意键: 结束): ')
            if t=='y':
                c = 0
  • 相关阅读:
    类的组合
    类的派生
    类的继承
    对象的高度整合
    类和数据类型
    对象的绑定方法
    对象属性查找顺序
    C++中struct和class的区别 [转]
    curl_setopt函数相关应用及介绍(转)
    linux 下如何查看和踢除正在登陆的其它用户 ==>Linux下用于查看系统当前登录用户信息的4种方法
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8335182.html
Copyright © 2020-2023  润新知