py_day7笔记

 
 

                                day7笔记

python文件操作

打开文件的方式:
r   只读
  r是默认的只读模式 读的是文字
      f = open('t.txt',mode='r',encoding='utf-8')   #f = open(文件路径+模式+编码集)
     1. ff = f.read()   读出文件全部内容, 默认从文件头开始读   缺点文件很大的话会占内存
      
      f1 = f.read(3)    ()里面写3就表示读前3个内容
     
      f2 = f.read()     执行f1操作后会继续往后读,而不会从头开始读了
      f.close()   #关闭文件    
      注意点:读完的文件句柄一定要关闭 
      
     2. ff1 = f.readline()    # 一行一行的读
      注意点:readline()读取出来的数据在后面都有一个\n
        f = open('liu.txt',mode='r',encoding='utf-8')
        msg1 = f.readline().strip()   #因为读出来有回车,所以用stirp取掉换行符'\n'
        msg2 = f.readline().strip()
        msg3 = f.readline().strip()
        msg4 = f.readline().strip()
        f.close()
        print(msg1)     #读出来内容就是  春眠不觉晓
        print(msg2)                      处处闻啼鸟
        print(msg3)                      夜来风雨声
        print(msg4)                      花落知多少
        
    3. 如果有较大的文件不推荐使用  f.read() 会引起内存崩溃
                         推荐使用  for line in f:
                                        print(line)   #这种方式就是一行一行的读,类似于ff=f.readline()

    4.rb 
       读出来的数据是bytes类型,在rb模式下,不能encoding字符集

        rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用到rb,因为这种数据是没办法直接显示出来的
        在后面我们文件上传下载的时候还会用到.
                                           
        f = open('path1/小娃娃.txt',mode='rb')   使用b的时候不能加编码集  b是操作字节的
        msg = f.read(3)       #  括号里 3 就是utf-8前三个字节,这3个字节就代表中文1个字,只能输出3,6,9,12...随便输4,5会在utf-8解码错误
        msg1 = f.read()       继续往后读得到后面所有的字节
        f.close()
        print(msg)
        print(msg1)
     
        结果:
        b'\xe9\xab\x98'
        b'\xe5\x9c\x86\xe5\x9c\x86\r\n\xe5\x88\x98\xe4\xba\xa6\xe8\x8f\xb2'
    5.  总结:
             只读 r        正常文本
             只读 rb       字节
             read()        默认全读完  可以指定读几个
             readline()    一行一行读
  
w  写:   
     
     1.覆盖写,用"w"模式打开的时候默认情况文件内容,再写
        ***在写文件的时候我们要养成一个写完文件就刷新的习惯.  刷新flush()***
        f = open('../path1/小娃娃.txt',mode='w',encoding='utf-8')
        f.write('太白很白')<br>f.flush()   # 清空原文件然后写入 太白很白
        f.close()
     2.如果文件不存在就会创建文件再写入,所以'w'模式可以创建文件再写入
     
     3.wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据
      
                f = open('../path1/小娃娃.txt',mode='wb')
                msg = '你好'.encode('utf-8')    #将你好转换成bytes才能写入
                f.write(msg)
                f.flush()  # 刷新
                f.close()
     3. 总结:
            w只能覆盖的写
            w模式会自动创建文件
            w模式下写的时候首先清空文件的内容,然后在写
a 追加
     1.只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.
             在追加模式下,我们写入的内容后追加在文件的末尾
        f = open('liu.txt',mode='a',encoding='utf-8')
        f.write('python的魅力')    #写在'liu.txt'文件内容的后面
        f.close()
     2. 总结
            a 追加 在文件文本末尾添加内容.     
        

路径:
    
    相对路径:用一个文件夹下的文件,相对于当前这个 程序 所在的文件而言.
    如果在同一个文件中,则相对路劲就是这个文件名.
    
                 f.open('..day6/liu.txt',mode='ab')   #  '..day6/liu.txt'这就是个相对路径  用斜杠隔开
                 
                 #    .. 返回上一级
    
    绝对路径:就是根目录开始一直到文件名.
                f.open('E:\s17\day7\liu.txt',mode='w',encoding='utf-8')   #'E:\s17\day7\liu.txt'  这就是个根目录,从磁盘一直到文件名称. 用反斜杠隔开
      
            转义   'E:\\s17\\day07\\文件夹\\s.txt'   r'E:\s17\day07\文件夹\s.txt'  绝对路径
      
        *******推荐使用相对路径,以后工作都使用相对路径***********

r+  读写

     r+ 是咱们最常用的
     
     必须是先读后写,因为光标默认在开头位置,当读完了以后再进行写入.我们以后使用频率最高的模式就是r+
     f = open('liu.txt',mode = 'r+',encoding='utf-8')
     f1 = f.read()                 #先读到文件的内容
     f.write('python 的魅力')     #再覆盖写入
     f.flush()
     f.close()                    #最后输出写出的内容
     **************深坑请注意: 在r+模式下. 如果读取的内容. 不论读取内容多少. 光标显示的是多少. 再写入
                                                               或者操作文件的时候都是在结尾进行的操作.
w+  写读      不常用

    先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的(为啥呢,因为读的时候光标在新写入内容的后面,所以读不到),不常用
     f = open('liu.txt',mode = 'r+',encoding='utf-8')
     f.write('python 的魅力')      #先将文件内容清空写入
     f1 = f.read()                 #  光标在python 的魅力的后面,读到的内容都是空的  所以读不到         
     f.flush()
     f.close()                    
     print(f1)                     #最后输出空的的内容
     
a+  追加读写

    a+模式下,不论是先读还是后读,都是读不到数据的
    
     f = open('liu.txt',mode = 'a+',encoding='utf-8')
     f.write('python 的魅力')      #  先将文件内容清空写入
     f1 = f.read()                 #  光标始终在python 的魅力的后面,读到的内容都是空的  所以读不到         
     f.flush()
     f.close()                    
     print(f1)
    
其他操作:
    1.seek()
       seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
                     通常我们使用seek都是移动到开头或者结尾
                     
            seek(0)   #将光标调整到开头   单个参数是字节数 0除外  0就是表示调整光标到开头

            seek(0,1)   #将光标调整到当前位置
            seek(0,2)   #将光标调整到末尾位置
            
            f = open('liu.txt',mode='w+',encoding='utf-8')
            f.write('独坐敬亭山')
            f.flush()
            f.seek(3)    #表示将光标以字节数进行前移 
            msg = f.read()
            f.close()
            print(msg)    #获取到 做敬亭山
    
    2.tell()   获取当前光标的位置
    
    f = open('文件夹/s.txt',mode='w',encoding='utf-8')
    ss = f.tell()  # 按字节算  #查看光标位置
    print(ss)
      
     
    3.truncate() 截断文件

            所以如果想做截断操作. 记住要先挪动光标. 挪动到你想要截断的位置. 然后再进行截断
            关于truncate(n), 如果给出n. 则从开头进行截断, 如果不给n, 则从当前位置截断. 后面
            的内容将会被删除

            f = open('liu.txt',mode='w',encoding='utf-8')
            f.write('独坐敬亭山')   #写入5个字符
            f.seek(3)    #将光标移动到3,也就是独和坐之间
            f.truncate(3)    #  删掉光标后面的内容            
            f.close()
            
    4.文件修改(偷天换日)
    
        with open('liu.txt',mode='r',encoding='utf-8')as f:  与  f = open('liu.txt',mode='w',encoding='utf-8')  写法一样
    
        with open('liu',mode='r',encoding='utf-8')as f,\
        open('fei.txt',mode='w',encoding='utf-8')as f1:     # 打开两个文件夹
        ff = f.read()   #  liu
        ff2 = ff.replace('','')  #修改     引用替换将 ff文件里面的 我 全部改成 都
        f1.write(ff2)  # fei.txt  修改后的内容
        for i in f:
        ret = i.replace('','大家')
        f1.write(ret)

        import os
        os.remove('liu.txt')
        os.rename('fei.txt','liu.txt')   # 第一个参数是重命名的文件,第二个参数是源文件.

猜你喜欢

转载自www.cnblogs.com/CrazySheldon1/p/9878984.html