文件操作

  以前总听别人说,把文件改成只读模式,也经常在文件属性中看到,是'只读',今天终于了解到一些相关的文件操作

模式

r    只读
r+  读+写
w   覆盖写
w+   先覆盖再写,然后再读
a   追加
a+   追加读

    只读: mode = "r""rb",读文件r 读字节rb

打开文件

  f = open('文件名',mode = 'r',encoding='utf-8')

参数1:文件的名字,(必须是字符串)  
参数mode:对这个文件的操作方式(模式)
参数encoding:    这个文件的编码集
f 文件句柄.所有对于文件的操作,都是操作文件句柄

文件路径: 

  绝对路径: 从磁盘查找额就是绝对路径
  相对路径: 相对于某个文件的位置(推荐写法)
  存放文件路径也必须是字符串类型,全部替换双斜杠,如果文件路径过长,在路径前加一个r,和\\一样,都是转义

读操作

f.read( ) 读, 一次性全部读取;如果文件过大,就会非常占用资源,导致内存崩溃
f.readline( )  读取一行,但是尾部有一个\n(换行符);只用在读的时候最后加一个strip()就可以解决
f.readlines( ) 一行一行读取,,读取多行,都存放在列表里
for循环读    每一次循环只在内存中占一行数据,很节省内存
f = open('t1',mode = 'r',encoding = 'utf-8')
  mode = 'r',只读模式
  read(),括号里的参数如果是单数,就代表读取的字符数量,例如read(3),就是读取前三个字 

f = open('t1',mode = 'rb')    
  mode = 'rb',    读取字节时不能指定编码集;    
      read(3)在当前模式下,是读取三个字节
示例1

写操作

  利用w 模式操作文件,如果文件不存在,就新建一个;mode = "w"或"wb" 写文件: w 写字节: wb (只写,没有读的功能)

  f.write("新内容"),覆盖写,在写之前把文件清空

追加操作

  mode = 'a', 在文件的末尾位置添加内容

r +    读+写
w +    写+读
a +    追加+读
f = open('t1',mode = 'r+',encoding = 'utf-8')    先读后写
f = open('t1',mode = 'w+',encoding = 'utf-8')    先写后读

f.seek() 移动光标位置,先写后读时光标默认是在最后,读取时需要把光标移动到最前面
例:

f = open('t1',mode = 'w+',encoding = 'utf-8')
f.write("写的内容")
f.seek( )    移动光标位置
print(f.read())

f = open('t1',mode = 'a+',encoding= 'utf-8') 追加写+读
  f.seek(0)
  print(f.read())

f.write('')
..\ 返回上一级
f.flush() 刷新

上下文管理 with open

with open('文件路径',mode = '模式',encoding = 'utf-8')as f:
  msg = f.read()
  print(msg) 不用手动关闭文件,操作完成之后自动关闭

其他操作

  f.seek(),移动光标的位置
  f.tell(),查看光标的位置
  f.truncate(),截取,指定光标的位置进行截取,按字节进行计算
  with open("文件路径",mode = '模式',encoding='utf-8')as f:
  pirnt(f.read())
  print(f.tell()) tell 查看光标的位置,数的是字节
  with open("文件路径",mode='模式',encoding='utf-8')as f:
  f.trunca(9),截取9个字节,也就是3个字符,在python3中,要先手动移动光标,再进行 截取

seek参数:

双数字:0,0文件的头部;0,1光标当前的位置;0,2文件尾部
单数字:数字表示的是字节
os模式:
os.rename("旧的名字","新的名字")
os.remove("要删除的文件")

文件修改,要先做备份


with open("文件路径",mode= '模式',encoding='编码集')as f,\
open("文件路径",mode='模式',encoding='编码集')as f1:
  f:原文件的句柄
  f1:新文件的句柄
  msg = f.read() 读取原文件的内容,临时存到msg变量中
  s = msg.replace('被修改的内容','修改后的内容')
  f1.write(s) 将修改的内容写到新的文件中, 原文件不动
ps:有一个弊端,当文件太大的时候,内存很容易溢出,需要用for循环

with open('文件路径',mode='模式',encoding='utf-8')as f,\
open('文件路径',mode='模式',encoding='utf-8')as f1:
  for i in f:                   #一行一行的读取
  msg = i.strip().replace("旧内容","新内容")
  f1.write(msg)                #将每行内容写入到新的文件中

posted @ 2019-01-11 21:41  DF-包子  阅读(246)  评论(0编辑  收藏  举报