Python学习Day9

01 补充知识
    unicode的二进制-----编码encode----->gbk格式的二进制
    res=x.encode('gbk')
    res=x.encode('utf-8')
    print(res,type(res))
    
    unicode的二进制<----解码decode------gbk格式的二进制
    m=res.decode('gbk')
    print(m)
    
02 文件处理
    1.什么是文件
        文件是操作系统为应用程序或者用户提供一种操作硬盘的虚拟单位
        强调:
            文件是操作系统提供的虚拟单位
            应用程序或者用户对文件的读写操作其实都是向操作系统发送指令
        
    2.为何要用文件
        文件对应的硬盘空间,如果需要考虑永久保存数据那必须使用文件
    
    3.如何用文件
        路径问题
        绝对路径:
            win:    C:\a\b\c\d.txt
            linux:    /a/b/c/d.txt
        相对路径:相对于当前执行文件所在文件夹
            a/b/c/d.txt
            
        1.打开文件
            f=open(r'D:\脱产5期内容\day09\a.txt',mode='rt',encoding='utf-8')
            print(f)
        
        2.读/写文件
            data=f.read()
            print(data)
            
        3.关闭文件
            f.close()#向操作系统发送指令,让操作系统关闭打开的文件,回收操作系统资源
            print(f)
            f.read()
            
    上下文管理
        with open('a.txt',mode='rt',encoding='utf-8') as f:
            data=f.read()
            print(data)
            
03文件的打开模式
    一 基本介绍
        控制文件读写操作的模式
        r(默认)
        w
        a
        控制文件读写内容的模式(不能单独使用,必须与r、w、a连用)
        t(默认)
        b
        
    二 详细介绍
        控制文件读写操作的模式
        r(默认):只读模式,以该模式打开文件,当文件不存在时则报错,当文件存在时文件指针在文件开头
        with open('a.txt',mode='rt',encoding='utf-8') as f:
            data=f.read()
            print(f.readable())
            print(f.writable())
            
            line=f.readline()
            print(line,end='')
            
            print('第三次读')
            line=f.readline()
            print(line,end='')
            print(data,type(data))
            
            for line in f:
                print(line)
                
            print(f.readlines())
            pass
            
        w: 只写模式,以该模式打开文件,当文件不存在时创建一个空文档,当文件存在时清空文件内容,文件指针在文件开头
            with open('a.txt',mode='wt',encoding='utf-8') as f:
                print(f.readable())
                print(f.writable())
                
            在打开了文件不关闭的情况下,连续的写入,新写的内容总是跟在老内容之后
            f.write('你瞅啥\n')
            f.write('瞅你咋地\n')
            
            lines=['1111\n','2222\n','3333\n']
            for line in lines:
                f.write(line)
            f.writelines(lines)
            
            f.write('aaaa\nbbb\ncccc\n')
            
        a:只追加写模式,以该模式打开文件,当文件不存在时创建一个空文档,当文件存在时不清空文件内容,文件指针跳到文件末尾
            with open('c.txt',mode='at',encoding='utf-8') as f:
                f.write('你好阿斯蒂芬\n')
                f.write('sdsd\n')
                
                f.writelines([1,2,3])
                
            控制文件读写内容的模式(不能单独使用,必须与r、w、a连用)
            t(默认):无论读写都是以字符为单位的,只能操作文本文件,必须指定encoding参数
            b:无论读写都是以bytes为单位的,可以操作所有文件,一定不能指定encoding参数
            with open('a.txt',mode='rb') as f:
                data=f.read()
                print(data,type(data))
                print(data.decode('utf-8'))
                
            with open('01.mp4',mode='rb') as f:
                data=f.read()
                print(data,type(data))
                
            with open('a.txt',mode='wb') as f:
                f.write('年后的变化'.encode('utf-8'))
                
        练习:拷贝文件小程序
            with open('01.mp4',mode='rb') as read_f,\
                    open(r'D:\1111.mp4',mode='wb') as write_f:
                data=read_f.read()
                write_f.write(data)
        
        了解:
        +:不能单独使用,必须与rwa连用,r+ w+ a+
        with open('a.txt','r+t',encoding='utf-8') as f:
            print(f.readable())
            print(f.writable())

            data=f.readline()
            print(data)
            f.write('刘清蒸')


        with open('a.txt','r+t',encoding='utf-8') as f:
            print(f.readable())
            print(f.writable())

            f.seek(10)
                print(f.tell())
            f.write('你好啊')
                
04 文件修改的两种方式
    方式一:
        1.以读的方式打开源文件
        2.将文件内容一次性全读入内存,在内存完成修改
        3.以写的方式打开源文件,然后将修改后的结果一次性写入源文件
    总结:
        优点:在文件修改过程中硬盘只存在一份数据
        缺点:浪费内存
    with open('b.txt',mode='rt',encoding='utf-8') as f1:
        msg=f1.read()
        new_msg=msg.replace('alex','大SB')
    with open('b.txt',mode='wt',encoding='utf-8') as f2:
        f2.write(new_msg)
        
    方式二:
        1.以读的方式打开源文件,以写的方式打开一个临时文件
        2.读取源文件的一行内容到内存中,将修改的结果写入临时文件,循环往复直到改
        3.删除源文件,将临时文件重命名为源文件名
        优点:同一时间在内存中只有文件的一行内容,更节省内容
        缺点:在文件修改过程中硬盘存在两份数据
    
    improt os
    with open('b.txt',mode='rt',encoding='utf-8') as read_f,\
            open('.b.txt.swap',mode='wt',encoding='utf-8') as write_f:
            for line in read_f:
                write_f.write(line.replace('大SB','alex'))
                
    os.remove('b.txt')
    os.rename('.b.txt.swap','b.txt')
        
        

 

posted on 2018-11-27 17:21  鲨鱼辣椒L  阅读(106)  评论(0编辑  收藏  举报

导航