zoukankan      html  css  js  c++  java
  • 文件的操作

    文件操作初识

    • 需要那些参数?
      • 文件路径——推荐相对路径
      • 打开方式
      • 编码方式
    • 命令:open()
      • 内置函数
      • 底层调用的是操作系统的接口
    • 基本格式
    f = open("C:购物车.txt",encoding="utf-8",mode="r")
    content = f.read()
    print(content)
    f.close()
    
    #说明:
    # f : 变量	文件句柄 
    # f.read()	—— 	对文件进行的任何操作都需要通过文件句柄.的方式
    # encoding="utf-8" —— 可以不写,默认的编码是操作系统默认的编码
    # f.close() —— 关闭文件,不关会占用内存
    # mode="r" —— 不写的话默认读
    
    • 操作三部曲
      • 打开文件
      • 对文件句柄进行相应的操作
      • 关闭文件
    • 常见的问题
      • 路径问题
        • Windows的路径分割符是,会有不可预知的错误
        • 解决方法:
          • 在每个前再加一个
          • 在路径的最前面加个r
            • repr():显示数据的原生态
      • 编码问题
        • UnicodeDecodeError:文件存储时与文件打开时用的编码不一致

    操作文件的读

    • r
    # read 全部读出来
    f = open("C:购物车.txt",encoding="utf-8",mode="r")
    content = f.read()
    print(content)
    f.close()
    
    #read(n) 按照字符读取
    #读文本代表读取n个字符;打开方式为b模式时,代表读取n个字节
    f = open("C:购物车.txt",encoding="utf-8",mode="r")
    content = f.read(4)		#读取前4个字符
    print(content)
    f.close()
    
    # readline() 按照行读取
    f = open("C:购物车.txt",encoding="utf-8",mode="r")
    content = f.readline()		#读取一行
    print(content)
    f.close()
    
    #readlines() 原文件的每一行读出来,并形成列表,每个元素时文件中的每一行
    f = open("C:购物车.txt",encoding="utf-8",mode="r")
    content = f.readline()		
    print(content)
    f.close()
    
    #for 循环读取 	适合读取大文件,以上4种适合读取小文件
    #文件句柄就是个迭代器
    f = open("C:购物车.txt",encoding="utf-8",mode="r")
    for line in f:
        print(line)
    f.close()
    
    • rb:操作的是非文本文件,用rb模式不需要设置encoding
    f = open(r"C:UsersliuguixiangPictures截图图像 002.jpg",mode="rb")
    content = f.read()
    print(content)
    f.close()
    
    • r+ :打开一个文件用于读写。文件指针默认将会放在文件开头
      • 注意:在读写模式下,先写后读,那么文件中的默认光标是在开始,先写则写入的内容会将原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。
    • r+b

    文件的写操作

    • w
    f = open(r"C:	est.txt",encoding="utf-8",mode="w")
    f.write("sdfg")
    f.close()
    
    #没有文件时新建文件并写入内容;文件存在时,会先清空再写入
    #文件句柄关闭之后再以w模式打开才会清空,只要没有关闭就可以持续写入
    
    • wb
    f = open(r"C:UsersliuguixiangPictures截图图像 002.jpg",mode="rb")
    content = f.read()
    f.close()
    f1 = open(r"C:UsersliuguixiangPictures截图	est.jpg",mode="wb")
    f1.write(content)
    f1.close()
    
    #可以作为拷贝非文本文件
    
    • w+
    • w+b

    文件的追加

    • a
    f = open("C:购物车.txt",encoding="utf-8",mode="a")
    content = f.write()
    f.close()
    
    #文件不存在时,会创建内容,然后追加;如果文件存在,那么直接在最后追加内容
    
    • ab
    • a+
    • a+b

    文件的其他操作

    • seek()

    seek(n)光标移动到n位置,注意:移动单位是byte,所以如果是utf-8的中文部分是3的倍数

    通常用来把光标移动到开头或结尾

    seek(0)		:移动到开头
    seek(0,2)	:移动到结尾
    seek(0,1)	:当前位置
    seek的第二参数表示的是从哪个位置进行偏移,默认是0,表示开头;2表示结尾
    #根据编码适当改变字节
    
    • tell()

    使用tell()可以获得光标的位置,查看的是字节数

    • readable(),writeable()
    • flush 强制刷新

    打开文件的另一种方法

    with open("C:购物车.txt",encoding="utf-8",mode="r") as f:
        print(f)
    
    with open("C:购物车.txt",encoding="utf-8",mode="r") as f,
        open(r"C:UsersliuguixiangPictures截图图像 002.jpg",encoding="utf-8",mode="r") as f2:
        print(f)
    
    • 优点:
      • 不需要手动close文件句柄
      • 可以同时打开多个文件

    文件的改操作

    改操作的五步走

    • 以读的模式打开原文件
    • 以写的模式创建新文件
    • 将原文件的内容读出来,修改成新内容,写入新文件
    • 将原文件删除
    • 将新文件重命名成原文件
    import os
    with open(r"C:Usersliuguixiang购物车.txt",encoding="utf-8",mode="r") as f1,
        open(r"C:Usersliuguixiang购物车back.txt",encoding="utf-8",mode="w") as f2:
        old_content = f1.read()
        new_content = old_content.replace("商品","abc")
        f2.write(new_content)
    os.remove(r"C:Usersliuguixiang购物车.txt")
    os.rename(r"C:Usersliuguixiang购物车back.txt",r"C:Usersliuguixiang购物车.txt")
    
    
    #进阶版
    import os
    with open(r"C:Usersliuguixiang购物车.txt",encoding="utf-8",mode="r") as f1,
        open(r"C:Usersliuguixiang购物车back.txt",encoding="utf-8",mode="w") as f2:
        for line in f1:
            new_line = line.replace("商品","abc")
            f2.write(new_line)
    os.remove(r"C:Usersliuguixiang购物车.txt")
    os.rename(r"C:Usersliuguixiang购物车back.txt",r"C:Usersliuguixiang购物车.txt")
    
    
  • 相关阅读:
    IE无法打开internet网站已终止操作的解决的方法
    iOS IAP教程
    splice()函数的使用方法
    socket通信简单介绍
    puppet安装和使用
    解惑:NFC手机怎样轻松读取银行卡信息?
    深入浅出谈开窗函数(一)
    TCP/IP协议,HTTP协议
    动态规划0—1背包问题
    栈的链式存储结构及其基本运算的实现
  • 原文地址:https://www.cnblogs.com/os-linux/p/11197813.html
Copyright © 2011-2022 走看看