• python--文件操作


    一 . 文件操作

    复制代码
    # open 打开
    # f = open(文件路径, mode="模式", encoding="编码格式") 最最底层操作的就是bytes
    # 打开一个文件的时候获取到的是一个文件句柄.
    
    # 首先需要有一个 "alex和wusir的故事"的文档
    f = open("alex和wusir的故事", mode="r", encoding="utf-8")
    # 读取内容
    content = f.read()  # 全部都读取出来
    print(content)
    # 坑:
    c2 = f.read() # 读取不到内容. 因为上面已经读取完毕. 光标在末尾
    print("c2", c2)
    # 良好的习惯
    f.close() # 关闭连接
    
    # 也可以用with对文件进行操作
    with open("alex和wusir的故事", mode="r", encoding="utf-8") as f:
      f.read()
    复制代码
    
    

    二 . 文件路径

    
    
    复制代码
     1. 相对路径: 相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字
          如果不在这个文件夹内. 可能需要出文件夹或者进文件夹
              出文件夹  ../
              进文件夹  文件夹/
     2. 绝对路径: 从磁盘根目录寻找路径 (有问题,比如说发给用户的是在D盘下的文件但是用户没有D盘就会出现问题)
              只有在记录日志的时候可以用到绝对路径
    日志: 程序运行过程中记录的信息.
    复制代码

    三 . mode 的各个功能

      mode: r

    复制代码
    f = open("乔峰会使用降龙十八掌.txt", mode="r", encoding="utf-8")
    print(f.read(5))  # 读取5个字符
    print(f.read(5))  # 继续读5个
    
    print(f.readline().strip()) # 换行符为分割, strip()可以去掉换行. 读取到的内容第一件事就是去掉空白
    print(f.readline()) # 换行符为分割
    f.close()
    
    print("周润发", end="胡辣汤")
    print("周星驰")
    print(f.readlines())  #  一次性把文件中的内容读取到列表中.
    复制代码

      mode: w

    复制代码
    # 每次用w模式打开文件, 都会清空这个文件(坑)
    f = open('胡辣汤', mode="w", encoding="utf-8") # 可以帮我们创建文件
    f.write('河南特色
    ')
    f.write("东北特色
    ")
    f.write('陕西特色
    ')
    # 好习惯
    f.flush()  # 刷新管道, 把数据写入文件
    f.close()
    复制代码

      mode: a

    f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件的末尾写入内容
    f.write("你叫什么名字啊?")
    f.read() # not readable
    f.flush()
    f.close()

      mode: +

    复制代码
    f = open("葫芦小金刚", mode="r+", encoding="utf-8")
    content = f.read(2)  # 顺序必须先读, 后写
    # r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
    f.write('五娃')
    print(content)
    
    一上来会清空文件. 没人用
    f = open("葫芦小金刚", mode="w+", encoding="utf-8")
    # content = f.read(2)  # 顺序必须先读, 后写
    # # r+特有的深坑:不论读取内容的多少. 只要你读了. 写就是在末尾
    # f.write('五娃')
    f.write("又能吐火的, 有能吐水的.")
    # 移动光标
    f.seek(0) # 移动到开头
    s = f.read()
    print("=========>", s)
    
    
    追加写读, 光标在末尾. 所有的写都是在末尾
    f = open("葫芦小金刚", mode="a+", encoding="utf-8")
    f.write("机器葫芦娃召唤神龙, 高喊.我代表月亮消灭你!")
    f.seek(0)
    s = f.read()
    print("=========>", s)
    复制代码

    四 . 文件复制

    复制代码
    f1 = open("c:/wuyanzu.jpg", mode="rb")
    f2 = open("d:/wuyanzu.jpg", mode="wb")
    for line in f1: # line是从f1中读取的内容
        f2.write(line)  # 把读取的内容原封不动的写出去
    f1.close()
    f2.flush()
    f2.close()
    复制代码

     五 . seek 和 tell

    复制代码
    f = open("胡辣汤", mode="r+", encoding="utf-8")
    f.seek(0,2) # 移动到末尾
    content = f.read(5)
    print(content)
    f.seek(0) # 移动到开头
    print(f.read())
    print(f.tell())  # 字节
    f.seek(3)
    print(f.read())
    复制代码

     六 . 文件修改

    复制代码
    # 需求: 把好人换成呵呵
    # 必须:
    #   1. 先从文件中读取内容
    #   2. 把要修改的内容进行修改
    #   3. 把修改好的内容写人一个新文件
    #   4. 删除掉原来的文件
    #   5. 把新文件重命名成原来的文件的名字
    
    # 导入os模块  os表示操作系统
    import os
    
    # f = open("夸一夸alex", mode="r", encoding="utf-8")
    # f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")
    
    # with会自动的帮我们关闭文件的链接
    with open("夸一夸alex", mode="r", encoding="utf-8") as f, 
         open("夸一夸alex_副本", mode="w", encoding="utf-8") as f2:
    
        for line in f:
            if "好人" in line:
                line = line.replace("好人", "sb")
            f2.write(line)
    
    # time.sleep(3) # 程序暂停3秒
    # 删除原来文件
    os.remove("夸一夸alex")
    # 重命名副本为原来的文件名
    os.rename("夸一夸alex_副本", "夸一夸alex")
    复制代码
  • 相关阅读:
    mysql删除重复记录,保存Id最小的一条
    前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误。    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected est
    Mysql 插入中文错误:Incorrect string value: 'xE7xA8x8BxE5xBAx8F...' for column 'course' at row 1
    Data truncation: Out of range value for column 'Quality' at row 1
    tomcat部署时war和war exploded区别
    IDEA 在某个工程下一个module如何使用另一个module中的资源文件(.xml .prop等)
    MyBatis错误:Result Maps collection already contains value for novel.storage.mapper.NovelMapper.BaseResultMap
    compareTo返回值为-1 、 1 、 0 的排序问题
    深入理解JVM+G1+GC.pdf (中文版带书签)
    轻量级微服务架构(下册)(中文版带书签)、原书代码、数据集
  • 原文地址:https://www.cnblogs.com/uiys/p/10673129.html
Copyright © 2020-2023  润新知