python基础之文件操作

文件操作

  • 文件操作 就是 操作文件

  • 文件操作的作用: 持久化存储

    1.file = 路径

    2.mode = 操作文件的方式

    r只读文本 w清空写文本 a追加写文本 ######

    rb只读字节 wb清空写字节 ab追加写字节 ###

    3.encoding = 文件的编码

    4.文件句柄(变量名f)

一、r: 读

  • f = open("test",mode = "r",encoding = "utf-8")

  • 打开 通过python向操作系统发送指令

  • 文件读取时只能读一遍,执行第二遍的时候是空的

    #print(f.read( ))    #全部读取
    print(f.read(3))  #模式的r的情况下按照字符读取
    print(f.readline().strip)   #读取一行
    print(f.readlines())  #读取多行,以列表的形式存储  输出结果是列表形式
    
  • 路径:

    • 相对路径:相对与当前运行的文件目录

    • import os
      
      print(os.getcwd( ))    #工作路径(当前py文件的父级目录路径)
      
    • 绝对路径:从磁盘根部开始查找的就是绝对路径

  • 转义

      1. \ \ 普通的\
      1. r"C:\Python\test\xxxx" 防止路径中出现,换行符,空格之类的,导致计算机误认为指令
    • f = open(r"C:\Python\test\xxxx",mode="r",encoding="utf-8")
      a = f.read()
      print(a)
      
  • rb 读字节 --- 爬虫 读取出来的全部是字节码

    f=open("test.text","rb",encoding="utf-8")
    print(f.read())    报错!  ValueError: binary mode doesn't take an encoding argument
    因为rb(rb+)操作时不支持指定encoding参数 所以不写encoding  如下方式
    f = open("2.png","rb")
    print(f.read())
    

二、 写

  • w 清空写:有文件时清空文件,没有文件时创建文件

    1.打开文件时自动清空文件内容

    2.写入内容

  • f = open("test","w",encoding="utf-8")
    f.write("今日是好日,明日会更好")
    f.flush()  # 刷新
    f.write("明日是好日,后日会更好.")
    f.close()  # 关闭文件
    打开文件,操作文件,关闭文件
    
  • wb : 清空写字节 爬虫

    • f = open("1.png","wb")
      f1 = open("2.png","rb")
      f.write(f1.read())
      

三、追加

  • 追加a 一直在文件的末尾进行添加

    f = open("test","a",encoding="utf-8")
    f.write("wdadwa")
    
  • ab追加写字节

    f = open("1.png","wb")
    f1 = open("2.png","ab")
    f.write(f1.read())
    在f末尾追加f文本内容字节
    

四、其他

  • +操作

  • r+ 读写 可读可写

    特殊的操作:

    先读后写, 写的东西在test原来存在的内容后面添加
    f = open("test","r+",encoding="utf-8")
    a = f.read()  
    f.write("这是读写啊")                可读可写
    #如果只“r”的话,f.write()会报错io.UnsupportedOperation: not writable  不支持写
    
    如果先写后读,会覆盖之前写的内容
    f = open("test","r+",encoding="utf-8")
    f.write("这样读取之后写入的内容会覆盖之前的内容") 
    f.seek(0,0)  #移动光标  移动到文件头部
    a = f.read() 
    因为是先写的,所以光标在末尾,如果不移动光标到头部,读取不到内容 (这样跟w+没有什么区别了就,所以尽量使用r+先读后写)
    
  • w+ 清空写,读

    f = open("test","w+",encoding="utf-8")
    f.write("哈哈哈")
    f.seek(0,0)  #移动光标  移动到文件头部
    print(f,read())
    如果不seek移动光标会读不到内容
    
  • a+:追加写,读

    f = open("test","a+",encoding="utf-8")
    f.write("呵呵")
    f.seek(0,0)  #移动光标  移动到文件头部
    print(f.read())
    就是先写后读,写的内容追加到末尾,然后再读都能读到,而w+是清空,读只能读到写入覆盖后的内容,a+就像r+和w+的结合体
    
# 最常用的是:r,w,a a+(没文件时) r+(覆盖一些内容)
# 光标
# f = open("test","r",encoding="utf-8")
# f.seek(0,0)   # 移动文件头部
# f.seek(0,1)   # 移动到光标当前位置
# f.seek(0,2)   # 移动到文件末尾
# f.seek(3)     # 移动3个字节,根据编码不同决定移动的字节大小
# print(f.read())
# print(f.tell())  # 查看光标 返回的是光标位置之前内容字节的数量

with open

特点:

1 自动关闭文件

2 可以同时操作多个文件

as 起别名

with open("test1","r",encoding="gbk") as f,\
open("test","r",encoding="utf-8")as f1:

print(f.read())
print(f1.read())

文件的修改

"w"没文件的时候创建文件

with open("test", "r", encoding="utf-8")as f, \
        open("test1", "w", encoding="utf-8")as f1:
    for i in f:
        f1.write(i.replace("嘿嘿", "sb"))
        f1.flush()

import os
os.rename("test","test2")
os.rename("test1","test")    源文件test给了test2,(一个暂时不存在的)  修改过的test1给了test
重点记住文本中存储的都是字符串
posted @ 2020-01-20 14:05  zz洲神在此  阅读(191)  评论(0编辑  收藏  举报