文件操作

1,文件操作的函数
   f= open(文件名(路径),mode="模式(r\w\a\r+\b)",encoding="字符集(GBK\UTF-8)")

  content = f.read() \ write()

  print(content)

  f.close()

    文件路径:
        1,绝对路径:从磁盘的根目录找  或者  从互联网上
        2,相对路径:相当于当前程序所在的文件夹   ../上一层文件夹
  我们更推荐大家使用相对路径. 因为在我们把程序拷贝给别人使用的时候. 直接把项目拷贝走 就能运行. 但是如果用绝对路径. 那还需要拷贝外部的文件.

2,模式  (r, w, a, r+, b 常用)

 r 只读

  1.read()  将文件中的内容全部读取出来. 弊端: 占内存. 如果文件过大.容易导致内存崩溃
  2.read(n) 读取n个字符. 需要注意的是. 如果再次读取. 那么会在当前位置继续去读而不是从头读, 如果使用的是rb模式. 则读取出来的是n个字节
  3.readline() 一次读取⼀行数据, 注意: readline()结尾, 注意每次读取出来的数据都会有一 个\n 所以呢. 需要我们使用strip()方法来去掉\n或者空格
  4.readlines()将每⼀行形成⼀个元素, 放到⼀个列表中. 将所有的内容都读取出来. 所以也是容易出现内存崩溃的问题.不推荐

      5. 循环读取. 这种⽅式是组好的. 每次读取一⾏内容.不会产生内存溢出的问题

  注意: 读取完的⽂件句柄⼀定要关闭   f.close()

    w 模式:只写
        带w的,只要你操作了,第一次操作就会清空原文件数据全部清空增加写的内容,后面写不会清空
        如果文件不存在就创建文件

    a 模式:追加
        写的时候,换行需要手动控制

    b:处理非文本文件——wb rb ab(bytes类型)如果处理的是非文本文件,mode里如果有b,encoding就不能给了

    +:
        r+:读写

   最好用的读写同时存在的模式
            r+的一个坑:不论你读取了多少内容,无论光标在哪,写入的时候都是在结尾写入

        w+:写读

    清空内容,写入

        a+:写读追加写读

3, 常用的操作
    1,光标(seek) 移动的单位是byte. 所以如果是UTF-8的中文部分要 是3的倍数
        f.seek(0)——将光标移动到开头
        f.seek(0,2)——将光标移动到末尾  seek的第二个参数表⽰的是从哪个位置进⾏偏移, 默认是0,  表示开头, 1表示当前位置, 2表示结尾
    2,tell()——拿到光标的位置
    3,truncate()——截断内容
        从文件开头截断到光标位置
        如果给参数,从头截断到参数位置

深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显⽰的是多少. 再写入 或者操作⽂件的时候都是在结尾进⾏的操作. 所以如果想做截断操作. 记住了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进⾏截断 关于truncate(n), 如果给出了n. 则从开头进行截断, 如果不给n, 则从当前位置截断. 后面 的内容将会被删除


    4,修改文件
        1,引入os模块 import os
        2,打开目标文件,r
        3,打开副本文件,w
        4,从r中读取内容进行修改,写入副本中
        5,删除源文件
        6,重命名副本

 

posted @ 2018-09-20 17:46  我兜里有块糖  阅读(101)  评论(0编辑  收藏  举报
目录代码