代码改变世界

对文件内部的内容进行操作

2018-09-26 21:21  他曾是少年  阅读(276)  评论(0)    收藏  举报
 
一.初识文件操作
 使用python来读写文件是非常简单的操作.我们使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种各样的操作了.根据打开方式的不同能够执行的操作也会有所不同.
 打开文件的模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
 r 为只读操作
 w 为只写
 a 为追加写
 r+ 读写
 a+ 追加读
 w+ 写读
 rb 读非文本文件 例如 MP3 图片 视频等信息的时候就需要用到rb
 ..
 ..
二.只读操作(r,rb)
 f=open("E:/pythonS16/day01/文件.txt",mode="r",encoding="GBK")
 c=f.read()
 print(c)
 f.close
 注:"E:/pythonS16/day01/文件.txt" 是文件路径
  mode="r"  是操作模式 r 为只读
  encoding="GBK"   编码方式 为只读"GBK"
  f.close   是关闭文件
  需要注意encoding表⽰示编码集.根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8
  rb. 读取出来的数据是bytes类型,在rb模式下不能选择encoding字符集.
  rb的作用在读取非文本文件的时候.比如读取MP3.图像.视频等信息的时候就需要用到rb.因为这种数据是没办法直接显示出来的.在后面我们文件上传下载的时候还会用到.
三.绝对路径和相对路径
 1. 绝对路径:从磁盘根目录开始一直到文件名.
 2.相对路路径:同一个文件夹下的文件.相对于当前这个程序所在的文件夹而言.如果在同一个文件夹中则相对路路径就是这个文件名.如果在上一层文件夹则要../
四 读取文件的方法
 1.read()将文件中的内容全部读取出来.弊端:占内存如果文件过大.容易导
 致内存崩溃
  例:
  f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
  content = f.read()
  print(content)
 
 2.read(n)读取n个字符.需要注意的是.如果再次读取.那么会在当前位置继
 续去读不是从头读, 如果使用的是rb模式. 则读取出来的是n个字节
  例:
  f = open("../def/哇擦.txt", mode="r" encoding="utf-8")
  content = f.read(3)
  print(content)
 
 3.readline()一次读取一行数据,注意:readline()结尾,注意每次读取出来
 的数据都会有一个\n所以呢.需要我们使用strip()方法来去掉\n或者空格
 
 4.readlines()将每一行形成一个元素,放到一个列表中将所有的内容都读
 取出来. 所以也是容易出现内存崩溃的问题不推荐使用
 
 5.循环读取.这种方式是组好的.每次读取一行内容.不会产生内存溢出的问
 题
  例:f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
     for line in f:
     print(line.strip())
五 警告!!!
 1.写的时候注意.如果没有文件.则会创建文件,如果文件存在.则将原件中
 原来的内容删除, 再写入新内容
 
 2.在追加模式下. 我们写入的内容会追加在文件的结尾.
 
 3.对于读写模式.必须是先读.因为默认光标是在开头的.准备读取的.当读
 完了之后再进行写入.我们以后使用频率最高的模式是r+ 
 
六 其他相关操作
 1.seek(n)光标移动到n位置,注意,移动的单位是byte.所以如果是UTF-8的
 中文部分要是3的倍数
 
 2. tell() 使用tell()可以帮我们获取到当前光标在什么位置
 
 3.truncate()截断文件。如果想做截断操作.记住了.要先挪动光标.挪动到
 你想要截的位置.然后再进行截断关于truncate(n),如果给出了n.则从开头
 开头进行截断, 如果不给n, 则从当前位置截断. 后面的内容将会被删除
七 修改文件的方式
 文件修改:只能将文件中的内容读取到内存中,将信息修改完毕,然后将源文
 件删除, 将新文件的名字改成老文件的名字.
  例:
  import os
 with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,\
 open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
  for line in f1:
   new_line = line.replace("大白梨", "冰糖葫芦")
   f2.write(new_line)
 os.remove("小娃娃") # 删除源文件
 os.rename("小娃娃_new", "小娃娃") # 重命名新文件