文件相关操作

-----------------------------------------文件的操作(1)---------------------------------------------------

  • 同级文件的只读,文件不存在报错

file=open('wenjian',mode='r',encoding='utf-8')
content = file.read()
print(content)
file.close()
  • 同级文件的只写,文件不存在便新建一个

file=open('wenjian',mode='w',encoding='utf-8')
content = file.write('杨子列')
file.close()
  • 当文件运行只写的时候,原文件会被清空,此时应该慎重,

  • 追加内容

    • 在尾部追加,不能读取,文件不存在便新建一个
    file=open('wenjian',mode='a',encoding='utf-8')
    content = file.write('杨子列')
    file.close()
    
    • 可读可写
      • 读取
      • 写入:从当前光标位置开始写入,会将后面的内容覆盖(只覆盖写入内容所占的字节)
      • r+
      file=open('wenjian',mode='r+',encoding='utf-8')
      file.seek(3) #光标移动到第三个字节后。也就是往后移动一个汉字,如果是两个字节处,便是乱码
      
      # content = file.read()
      content = file.write("狼") #因为read读到最后,所以write所添加的内容在最后
      file.close()
      
      • w+
      • 默认光标在最后,当打开时就是从0开始,因为清空
      • 写入时会将文件覆盖,读取时需要调整光标
      file=open('wenjian',mode='w+',encoding='utf-8') #打开文件并清空
      content = file.read()
      print(content)
      file.write("狼")
      file.seek(0) #将光标移动至初始位置,否则无法读出
      data = file.read()
      print(data)
      file.close()
      
      • a+
      • 默认光标在最后,读的时候可通过改变光标的位置进行读取,只要写的时候比在最后追加
    • file=open('wenjian',mode='a+',encoding='utf-8') #打开文件并清空
      content = file.read()
      print(content)
      file.write("yang") #只要写入,必从最后开始,调整光标也没用
      file.seek(0) #将光标移动至初始位置,否则无法读出
      data = file.read() #读取时默认也在最后
      print(data)
      file.close()
      
    • 内存相关操作

  • file=open('wenjian',mode='r',encoding='utf-8')
    file.seek(3)#第三个字节后
    content = file.read(2)#从当前光标位置再往后读取两个字符
    print(content)
    
  • file=open('wenjian',mode='r',encoding='utf-8') 
    content = file.readlines()
    print(content)
    #读取文件中的所有内容到内存,并按照每一行分割至列表中
    
  • 当读取一个较大的文件时

  • file=open('wenjian',mode='r',encoding='utf-8')
    for lin in file:
        lin = lin.strip()#不但可以消除空格,还可以消除换行符
        print(lin)
    
  • 文件的写入相关操作

file=open('wenjian',mode='w',encoding='utf-8')
file.write("小黑\n")
file.write("小红")
data  = file
#输出
小黑
小红

文件相关操作的补充

  • r+、w+和a+的联系及区别
    • f.seek(0)------------移动光标的位置,其值不可以为负数
    • r+与w+的默认初始位置均为最最左端,但需要注意的是:当利用read时,因为光标读到了最后,所以,此时光标在最后
    • r+可以利用seek选定要操作的起始位置,但w+不可以,其无情的将所有的原内容覆盖,覆盖后的的光标位置再最后所以在
    • (接上一行)read时需要调整光标的位置,如:seek(0)--------从起始位置开始读取
    • a+读的时候可调整位置,写的时候无情追加,调整位置不管用
  • 总结:个人认为,r+可以称为读写,w+可称为写读,seek在其中扮演者调整位置的作用(在w+的write中不管用),a+读的时候可调整读取位置,读取的时候便无情的追加

rb/rwb/ab 只读只写二进制
r+b/w+b/a+b 可读可写二进制

  • readline与readlines**
f = open('ceshi.txt','r',encoding='utf-8')
v2 = f.readline(5)#读取所指定行的钱五个字符
#此处要留意光标的位置,因为v2已经读到了第五个字符的位置所以v1接着往下读
v1 = f.readlines() #文件比较小时,一下子干到内存,分条读取并以列表的额形式呈现
print(v1)
print(v2)
  • writelines

    • 将内容是字符串的可迭代性数据写入文件中------可以是列表、元组等必须是字符串的容器
    with open("ceshi.txt", mode="r+", encoding="utf-8") as fp:
        # strvar = "今天天气好晴朗"
        lst = ('亲爱的', "美女", "请看我", "一眼")
        fp.writelines(lst)
    
posted @ 2020-06-18 02:19  小杨的冥想课  阅读(239)  评论(0编辑  收藏  举报