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

    文件操作

    参考博客

    1.书写方式

    f = open('数据类型练习.py','r',encoding='utf8')
    content = f.read()
    print(content)
    f.close()
    	 # 要打开的文件格式一定要书写正确,注意是否需要添加后缀
    
    上述代码各个部分解释:
    
        f: 就是一个变量,称作文件句柄。
    
        open:是Python调用的操作系统(windows,linux,等)的功能。
    
        '数据类型练习.py': 这个是文件的路径。
    
        mode: 就是定义你的操作方式:r为读模式。
    
        encoding: 不是具体的编码或者解码,他就是声明:此次打开文件使用什么编码本。一般来说:你的文件用什么编码保存的,就用什么方法打开,一般都是用utf-8(有些使用的是gbk)。
    
        f.read():你想操作文件,比如读文件,给文件写内容,等等,都必须通过文件句柄进行操作。
    
        close(): 关闭文件句柄(可以把文件句柄理解成一个空间,这个空间存在内存中,必须要主动关闭)。
    

    2.路径注意

    • 路径中存在其它特殊符号,使得地址意义发生改变
      
       例: 'D:最新学习资料
      d.txt'
      
    • 解决方法

      • 在发生意义改变的符号前面加\来抑制转义
      • 或者路径整体前面添加r,r'D:最新学习资料 d.txt'
    • 相对路径

      • 从磁盘根目录开始
    • 绝对路径

      • 上一层文件夹用../

    3.文件操作

    r模式

    1. read() 一次全部读取出来,文件大会非常占内存

    2. read(n) n表示字符,☞读到什么位置

    3. readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个

      • 解决方法:在读取出来的数据后面添加.strip()
    4. readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。

      f = open('log',encoding='utf-8')
      print(f.readlines())
      f.close()
      # 结果['666666
      ', 'fkja l;
      ', 'fdkslfaj
      ', 'dfsflj
      ', 'df;asdlf
      ', '
      ', ]
      
    5. for循环(最最常用的)

      • 文件句柄是一个迭代器,特点每次循环只在内存中占一行的数据,非常节省内存
      f = open('../path1/弟子规',mode='r',encoding='utf-8')
      for line in f:
          print(line)
      f.close()
      

    rb模式

    1. 以二进制格式打开一个文件用于只读,主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。
    2. read read(n) readline(),readlines() for循环这几种方法

    4.写

    • w模式
      • 文件不存在,是先创建,然后写内容
      • 文件存在先清空原文件内容,再写入新内容
    • wb模式
      • 文件不存在,是先创建,然后写内容
      • 文件存在,先清空原文件内容,再写入新内容

    5.追加

    • a

    注意

    #1. 打开文件的模式有(默认为文本模式):
    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
    
    #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb 
    wb
    ab
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    

    文件操作的其它操作

      read(n)

    1. 文件打开方式为文本模式时,代表读取n个字符
      2. 文件打开方式为b模式时,代表读取n个字节

      seek()

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

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

    • 移动到开头:seek(0)

    • 移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾

    f = open("小娃娃", mode="r+", encoding="utf-8")
    f.seek(0) # 光标移动到开头
    content = f.read() # 读取内容, 此时光标移动到结尾
    print(content)
    f.seek(0) # 再次将光标移动到开头
    f.seek(0, 2) # 将光标移动到结尾
    content2 = f.read() # 读取内容. 什么都没有
    print(content2)
    f.seek(0) # 移动到开头
    f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9
    f.flush()
    f.close()
    

      tell()

    使用tell()可以帮我们获取当前光标在什么位置

    最最常用文本打开操作

    • with open() as ...
      • 好处:
        • 自动关闭文件句柄
    # 1,利用with上下文管理这种方式,它会自动关闭文件句柄。
    with open('t1',encoding='utf-8') as f1:
        f1.read()
        
    # 2,一个with 语句可以操作多个文件,产生多个文件句柄。
    with open('t1',encoding='utf-8') as f1,
            open('Test', encoding='utf-8', mode = 'w') as f2:
        f1.read()
        f2.write('老男孩老男孩')
    

    r+模式!!!

    1. 读写度模式

      ##xxoo 文本内容
      abcd
      qwer
      sdf
      sidh
      sdjf
      小明  666#执行完显示
      
      with open('xxoo','r+',encoding='gbk') as f:
          print('--第一次读取-->>',f.readline())
          f.write('
      小明  666')
          print("--->>>",f.readline())
          #--第一次读取-->> abcd
      	--->>> 
          
      #读的时候光标在初始位置0开始读,
      #写的时再末尾添加,此时光标在尾部
      #再次读,从光标尾部读
      
    2. 先写后读

      with open('xxoo','r+',encoding='gbk') as f:
          f.write('小明  666')
          print(f.read())
      结果:
      r
      sdf
      sidh
      sdjf
        ##  先做写操作,写的内容默认从初始位置0开始写,会覆盖掉原来的数据,写完后光标再写的后面
          #再读的时候从光标位置读
      

      a+模式

      无论是先读还是先写,光标都是再末尾。。。
      
  • 相关阅读:
    【Vue教程系列:第一篇】Win7 搭建Vue开发环境
    MVC 之 WebAPI 系列二
    MVC 之 WebAPI 系列一
    Javascript 截取2位小数
    Javascript 处理时间大全
    SpringBoot是如何动起来的?
    超全、超详的Spring Boot配置讲解笔记
    Java数据结构-ArrayList最细致的解析笔记
    Redis 到底是怎么实现“附近的人”这个功能的?
    02--Java Jshell的使用 最适合入门的Java教程
  • 原文地址:https://www.cnblogs.com/xiaobai686/p/12095491.html
Copyright © 2011-2022 走看看