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

    文件操作初识

    1. 文件操作步骤

      • 打开文件
      • 操作文件
      • 关闭文件 f.close()
    2. 打开文件

      f = open("文件路径",mode="文件操作模式",encoding="编码方式")
      

      f 文件句柄

      路径:绝对路径(从磁盘的根处查找)

      ​ 相对路径(相对当前文件进行查找的),建议使用相对路径

      import os
      print(os.getcwd())#查看当前工作路径
      

      可通过源码显示方式填写路径,如下:

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
      

      可减少因路径中“”所造成的错误。

      编码方式:win ——gbk

      ​ linux——utf-8

      ​ mac——utf-8

    3. 文件操作模式

      3.1文本文件

      r 读 读文件,都到哪,光标移动到哪,下次读就从光标位置开始

      f.read() 一次全部读完整个文件,可按字符读取若文件太大会造成内存溢出

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
      print(f.read())
      结果:
      铁憨憨
      血河大帝
      碎小梦
      龙吟
      

      f.read(2) 读取前两个字符

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
      print(f.read(2))
      结果:
      铁憨
      

      f.readline() 读取一行文件

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
      print(f.readline())
      结果:
      铁憨憨
      

      f.readlines() 按行读取,存储到列表中

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
      print(f.readlines())
      结果:
      ['铁憨憨
      ', '血河大帝
      ', '碎小梦
      ', '龙吟']
      

      通过for循环迭代,一行一行读取,防止内存溢出

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
      for i in f:
          print(i)
      结果:
      铁憨憨
      
      血河大帝
      
      碎小梦
      
      龙吟
      

      w 写 清空写

      若文件不存在先创建文件,在执行写操作;若文件存在,会先删除原文件中的内容在执行写操作。

      a 追加写 写在文件末尾

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="a",encoding="utf-8")
      f.write("碎梦都是坑!")
      文本中显示内容:
      铁憨憨
      血河大帝
      碎小梦
      龙吟碎梦都是坑!
      

      r+ 读写 先读后写

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="r+",encoding="utf-8")
      f.read()
      f.write("会呼吸的江湖")
      文件显示内容:
      铁憨憨
      血河大帝
      碎小梦
      龙吟碎梦都是坑!会呼吸的江湖
      

      w+ 写读 先写后读,会先将原文件内容删除,然后写,最终读不到文件。是真的没用。

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="w+",encoding="utf-8")
      f.write("会呼吸的江湖")
      f.read()
      结果:
      无返回
      文件显示内容:
      会呼吸的江湖
      

      a+ 追加写读 直接追加在文件末尾,直接读不出,需通过移动光标来完成读操作

      f = open(r"E:python_workspaceday008顺火暖.txt",mode="a+",encoding="utf-8")
      f.write("会呼吸的江湖")
      f.seek(0)
      print(f.read())
      结果:
      铁憨憨
      血河大帝
      碎小梦
      龙吟碎梦都是坑!会呼吸的江湖
      

      f.tell() 查看光标位置,按字节查看

      f.seek(0,0) 移动光标到文件的开始位置,按字节移动

      f.seek(0,1) 移动光标到光标的当前位置,按字节移动

      f.seek(0,2) 移动光标到文件的末尾位置,按字节移动

      3.2 非文本文件

      rb 读 wb写 ab追加写 不能指定编码

      import requests
      ret = requests.get("http://www.521609.com/uploads/allimg/151124/1-1511241G251317.png")
      f = open("2.jpg",mode="wb")
      f.write(ret.content)
      f.close()
      
    4. 另一种文件打开方式

      with open("文件路径",mode="操作文件的方式",encoding="编码") as f:
      上下文管理
      1.可以自动关闭文件
      2.可以同时打开多个文件

      with open("day8",mode="r",encoding="utf-8") as f,
          open("a",mode="w",encoding="gbk") as f1:
          print(f.read())
          f1.write("真饿!")
      
    5. 文件的修改

      with open("原文件")as f,open("新文件")as f1:
      f.for循环的读取
      f1.for循环的写入

      with open("day8",mode="r+",encoding="utf-8")as f:
          content = f.read()
          content = content.replace("您","你")
          f.seek(0,0)
          f.write(content)
      

      import os
      os.rename("原文件名字",备份名字") # 对原文件进行备份
      os.rename("新文件名字","原文件名字") # 把新文件改成原文件的名字

      with open("day8",mode="r",encoding="utf-8")as f,
      open("new_day8",mode="a",encoding="utf-8")as f1:
          for i in f:
              content = i.replace("你","我")
              f1.write(content)
      import os
      os.remove("day8")  # 原数据可以使用rename来做备份
      os.rename("new_day8","day8")
      
  • 相关阅读:
    Jessica's Reading Problem POJ
    FatMouse and Cheese HDU
    How many ways HDU
    Humble Numbers HDU
    Doing Homework again
    Stacks of Flapjacks UVA
    Party Games UVA
    24. 两两交换链表中的节点
    面试题 03.04. 化栈为队
    999. 可以被一步捕获的棋子数
  • 原文地址:https://www.cnblogs.com/yaoqi17/p/11018408.html
Copyright © 2011-2022 走看看