• 神奇的python系列7:文件操作


    1.文件操作

    我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了。

    f = open('t2',mode='r',encoding='utf-8')

    open() 打开,  第一个内容是文件的名字(必须是字符串)

    mode=  第二个内容是咱们对这个文件的操作方式

    encoding=  第三个内容是咱们这个文件的编码集

    f  文件句柄所有对文件的操作都是操作文件句柄

    打开文件的方式:

      r,w,a

      r+,w+,a+

      rb,wb,ab

      r+b,w+b,a+b

    默认使用的是r(只读模式)


    2.只读

    r 只读

    f = open('t2',mode='r',encoding='utf-8')
    content = f.read()
    #读 一次性全部读取
    content1 = f.readline()
    # 读取一行,但是有个
    换行
    content = f.readlines()
    # readlines  读取一行一行的,存放在列表里
    print(content)

    rb 读取bytes类型:

    rb 读出来的数据是bytes类型,在rb模式下,不能encoding字符集(rb,wb,ab模式同样适用)

    rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用

    到rb,因为这种数据是没办法直接显示出来的。

    f = open('C:\Users\oldboy\Desktop\QQ.jpg',mode='rb')
    # r 和 \ 一样都是转义
    # rb读取字节

    绝对路径:从磁盘根目录开始查找

    相对路径:相对于某个东西来查找就是相对路径

    f = open('QQ.jpg',mode='rb')
    # 相对路径 
    print(f.read())

    3.覆盖写

    w 模式:只有写没有读的功能。

    f = open('t2.txt',mode='w',encoding='utf-8')
    f.write('在网上也是这样。')
    f.write('人生三个爽')
    #w模式 如果文件不存在就新建一个
    #覆盖写,写之前先把文件清空

    wb 模式:wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换

    成utf-8的bytes数据。

    f = open('../path1/小娃娃.txt',mode='wb')
    msg = '你好'.encode('utf-8')
    f.write(msg)
    f.flush()  # 刷新 在写文件的时候我们要养成一个写完文件就刷新的习惯. 刷新flush()
    f.close()

    a 模式:追加

    只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.

    在追加模式下,我们写入的内容后追加在文件的末尾。

    f = open('t2',mode='a',encoding='utf-8')
    f.write('相对路径')
    # 文件最后添加内容


    4.读写,写读,追加读

    r+    读写模式

    读写模式,必须是先读后写,因为光标默认在开头位置,当读完了以后再进行写入.

    f1 = open('../path1/小娃娃.txt',mode='r+',encoding='utf-8')
    msg = f1.read()
    f1.write('这支烟灭了以后')
    f1.flush()
    f1.close()
    print(msg) #结果:正常的读取之后,写在结尾

    注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入
    或者操作文件的时候都是在结尾进行的操作.

    w+ 写读模式

    先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,除非移动光标,不常用。

    f = open('t2',mode='w+',encoding='utf-8')
    f.write('老子今天上班了')
    f.seek(0)   # 移动文件光标
    print(f.read())

    a+  追加读

    a+模式下,不论是先读还是后读,都是读不到数据的,除非移动光标。

    f = open('t2',mode='a+',encoding='utf-8')
    f.seek(0)
    print(f.read())
    f.write('哈哈哈')

    5.文件其他操作

    seek()  移动光标

    通常我们使用seek都是移动到开头或者结尾

    移动到开头:seek(0) 实际是seek(0,0)

    当前位置:seek(0,1)

    移动到结尾:seek(0,2)

    注意: 移动单位是byte,如果是utf-8的中文部分要是3的倍数如果是文字就移动一位,如果是英文就移动3位。

    tell() 查看光标:光标是按照字节数的

    truncate()  截取:内容是字节数,如果想做截断操作. 记住了. 要先挪动光标,挪动到你想要截断的位置,然后再进行截断。

    with open('t2','rb')as f:
        print(f.read())
        print(f.seek(0))  # 文件头部
        print(f.read(1))
        print(f.tell())  # 查看光标的位置   数的是字节
    with open('t2','r+',encoding='utf-8')as f:
    f.truncate(9)  # 3个字符  指定字节之后的门内容全部删除

    6.文件名修改

     import os  导入

    os.rename()    重命名 第一个参数旧的名字,第二个是新的名字

    os.remove()    删除这个文件

    import os
    os.rename('t2','t3')
    
    with open('t3','r',encoding='utf-8')as f,
        open('t5','a',encoding='utf-8')as f1:
        msg = f.read()  # 将源文件复制一份
        msg = msg.replace('','')
        f1.write(msg)
    import os
    os.remove('t3')   # 删除原数据
    os.rename('t5','t3')
    
    
    with open('t3',mode='r',encoding='utf-8')as f,
            open('t5',mode='a',encoding='utf-8')as f1:
        for i in f:
            i = i.strip().replace('','爸爸')
            f1.write(i)
    print(f.readline().strip())

    总结:

    r 只读 不能写
    read() 读取全部
    模式是r的时候,read(3)就是读取3个字符
    模式是rb的时候,read(3)就是读取3个字节

    readline() 读取一行
    readlines() 存放在一个列表中

    w 只写 不能读
    覆盖写,先清空文件的内容,在写
    当文件不存在的时候,创建一个文件

    a 追加写 不能读
    写的内容一直都在文件的末尾

    r+ 读写
    错误示范 先写后读
    正确的是 先读后写

    w+ 写读
    写读的时候是读不到内容的,除非移动光标

    a+ 追加写 读
    写读的时候是读不到内容的,除非移动光标

    最常用: r,w,a,r+,a+

    with open('t2',mode='w',encoding='utf-8')as f:   #上下文管理   --- 面试题
    msg = f.write('小强和刘申')
    print(msg)
    # 不用你自动关闭文件
  • 相关阅读:
    Apache并发相关的几个配置
    MPM:Multi-Processing Modules
    regsvr32是干什么的
    第一个子容器设置margin-top后和父容器发生外边距合并,解决办法是给父容器设置非0 padding-top或overflow:hidden
    li或dd 浮动后增加图片时高度多出3-5px的问题
    [Error: No platforms added to this project. Please use `cordova platform add <platform>`.]
    单链表的实现(python)
    python的顺序表(list,tuple)
    python装饰器
    梯度下降算法
  • 原文地址:https://www.cnblogs.com/xianyuwangzhe/p/10256792.html
Copyright © 2020-2023  润新知