zoukankan      html  css  js  c++  java
  • python 文件读写

    创建一个文件对象

    创建完对象记着关闭,使用 with as的方法可以自动关闭对象,避免复杂的写法。

    代码1-1
    # 常规
    try:
        f = open("b.txt", "r+")
    except FileNotFoundError as e:
        print('没有找到文件')
    finally:
        if f:
            f.close()
    
    # with as
    with open("b.txt", "r+") as f:
        pass
    
    表1-2
    打开方式 模式 文件 指针
    r 只读 无文件抛出FileExistsError seek(0,0)
    w 只写 创建文件,已有文件覆盖(不可以创建目录,需要请使用makedirs()等os方法) seek(0,0)
    x 创建 创建文件,已有文件抛出FileExistsError seek(0,0)
    a 追加 没有文件则创建文件 seek(0,2)不可更改
    b 二进制 无更改
    t 文本模式(默认) 无更改
    + 获得读写的功能 无更改
    • seek定义

      offset ( 偏移量)

      whence:可选,默认值0。0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

      我们看到seek方法有一个返回值int,这个就是文件的指针索引。

      @abstractmethod
      def seek(self, offset: int, whence: int = 0) -> int:
          pass
      

      b.txt文件中的内容:abcdefg**。一共有有9个字符。

      代码1-3
      f = open(r"E:PycharmProjectspythonProject1.txt", "r+")
      f.seek(0,1)			#r+模式默认字符指针为0
      0
      f.seek(15)			#偏移量加15,字符指针指向15。
      15
      f.seek(16)			#偏移量加16,字符指针指向16,偏移量并没有累加,每次都是绝对于0变化。
      16
      f.seek(0)
      0
      
      f.seek(1,1)			#whence不为默认参数0的话,offset(偏移量)一定要为0,否则抛出错误。
      Traceback (most recent call last):
        File "<input>", line 1, in <module>
      io.UnsupportedOperation: can't do nonzero cur-relative seeks
          
      f.seek(0,2)			#看了上一条就知道whence不为0,offset(偏移量)是没有价值的,原字符的长度为9,所以末尾的字符指针指向9。
      9
      f.seek(0,1)			#上一条指向9,所以当前位置也等于9。
      9
      
    • 读入和写出常用函数

      代码1-4
      with open("a.txt", "w+", encoding="utf-8") as f:
          print(f.writable())  # 是否可以写
          print(f.readable())  # 是否可以读
          print(f.tell())  # 返回当前字节数 f.tell()等价于f.seek(0, 1)、
      
          f.write("将进酒
      ")  # 全部写入
          f.writelines(["君不见黄河之水天上来,", "奔流到海不复回。
      ", "君不见高堂明镜悲白发,", "朝如青丝暮成雪。
      "])  # 数组写入
      
          f.seek(0, 0)
          print(f.read(), end='')  # 全部读
      
          f.seek(0, 0)
          print(f.readline(), end='')  # 读一行
          for s in f.readlines():  # 一行一行的读
              print(s, end='')
      
          f.seek(0, 0)
          print(f.readline(10))
          print(f.readline(1))
          print(f.readline(1))
      
          print(f.readlines(18))  # 18>光标大于当前行,小于下一行,从当前位置输出到下一行结束
          print(f.readlines(1))  # 光标已经结尾,输出空行
      
          f.seek(15, 0)
          f.truncate()  # 从文章开头保留到光标位置,一共15个字节,和上一句一起可以简化为 f.truncate(15)。
      

      注:行输出包括换行回车(windows:'/n')。

      遇到中文python自动使用'GBK',如果文本是其他格式,打开文件要用encoding="格式"选择指定的格式。

      默认的打开模式为文本。

      假如文本有10个字符,在已有0字符位写入8个字符,将会覆盖原来字符(1-8),没有没覆盖的则不变(9-10)。

    • 实例

      在b.txt(abcdefg**)中的**前面插入一个’/‘,并输出b.txt的长度和b.txt的内容。

      代码1-5
      with open("b.txt", "r+") as f:
          f.seek(0,2)
          f.write('*')
          f.seek(7)
          f.write('/')
          print(f.seek(0,2))
          f.seek(0)
          print(f.read())
      

      将一个视频复制一份。

      代码1-6

    with open(r'C:Users
    aojiVideosCaptures绝地求生  2018-10-11 18-46-14.mp4','rb') as f:
        with open(r'C:Users
    aojiVideosCaptures绝地求生1.mp4', 'wb') as f1:
            s = f.read(1024)
            while s != b'':
                f1.write(s)
                s=f.read(1024)
    
  • 相关阅读:
    axios的数据请求方式及跨域
    vuex 的介绍
    返回顶部的过渡式写法
    数据结构和算法——二叉树
    RecyclerView的刷新和加载更多
    希尔排序小结
    选择排序小结
    插入排序小结
    冒泡、快速排序小结
    数据结构和算法——递归算法
  • 原文地址:https://www.cnblogs.com/adamr/p/14141829.html
Copyright © 2011-2022 走看看