zoukankan      html  css  js  c++  java
  • 文件的操作

    1 文件操作的三个步骤

      打开文件 open()

      操作文件 read()或者write()

      关闭文件 close()

    2 打开文件

      open()函数默认的是 读 模式, 默认的编码是 系统当前的编码 .

    f = open("test")
    data = f.read()
    print(data)
    
    Traceback (most recent call last):
      File "F:/python自主学习/PyCharm/Day19/文件操作.py", line 8, in <module>
        data = f.read()
    UnicodeDecodeError: 'gbk' codec can't decode byte 0x85 in position 14: illegal multibyte sequence

      open()操作可能会引发异常, 诸如 IOerror

      open()函数会返回的内容叫文件句柄, 是一个可迭代对象

    f = open("test",encoding="utf8")
    for line in f:
        print(line.strip())
    

    文件打开的时候可以设置buffering, 设置缓冲之后, open()就会使用内存来代替硬盘

      当设置为0或者False, 表示不使用缓冲, 当设置为1或者True的时候, 表示使用缓冲

      当值大于1的时候, 就设置缓存区的大小(单位为字节)

      当值为-1或者为负数, 就设置为默认的缓存区大小

    3 模式介绍

      三个基本模式r w a

        r读模式

          这个模式只能读, 打开后光标位置在0处

        w写模式

          这个模式只能写, 不能读, 打开后的光标在0处

          该模式打开之后, 会直接将源文件清空, 也正是因为这个原因光标才在0处

        a追加模式

          这个模式只能写, 不能读, 打开后的光标文件末尾

          写入的时候, 不会因为光标的位置在哪而写入哪儿, 而是始终在文件末追加

      可读可写的+模式

        r+模式

          可读可写, 最老实的模式, 光标刚打开的时候是在0位置

          读完之后光标会随着读的位置变化而变化

          写入的时候不会清空原有内容, 只会单纯的在光标位置处写入内容, (因而在光标0处写入一个字符只会改变光标0处的内容)

        w+模式

          可读可写, 保留w的特性, 上来就清空源文件

        a+模式

          可读可写, 保留a的特性, 写入不根据光标位置  

    4 文件的读操作

      read()方法

        读取整个文件

        读取单位是字符

        可以传入int参数, 用于获取光标到目标位置字符的内容, 最开始打开文件的时候光标在文件开始位置

    f = open("test", encoding="utf-8")
    data = f.read(5)
    print(data)
    f.close()
    

      readline()

        读取一行

        光标到下一行行首

      readlines()

        返回一个可迭代对象, 每一个元素是一行内容

        用作遍历的时候效果相同的还有文件句柄, 但是最好使用文件句柄, 这样更省内存(文件句柄是用一行拿一行)

    f = open("test",encoding="utf8")
    for line in f:
        print(line)

      readable()

        查看文件是否可读, 返回的是布尔类型

    5 文件的写操作

      write()

        将需要写入的内容写入到文件中

      writelines()

        与write()方法的区别就在于, 传入的参数是一个列表, 该方法不自动增加换行, 需要手动添加换行符号

      writeable()

        查看文件是否可读

    6 光标的操作

      seek()

        传入一个参数, 该值就是设置光标的位置, 从0开始, 是以字节的方式排序得到的顺序

        传入两个参数, 第一个参数功能一致, 第二个参数默认为0, 表示从头开始, 为1时表示从当前光标挪动位置, 为2时表示从文件末尾开始, 且(0, 2)组合用于各个模式, 但是(负数, 2)需要以b读写模式!

      tell()

        查看当前光标的位置

        其中换行占2个位置

    7 with语句

      with语句自带使用close()方法, 这也是为了防止打开文件忘记关闭

    with open("test",encoding="utf8") as f_read, open("test2","w", encoding="utf8") as f_write:
        for line in f_read:
            f_write.write(line)

    8 flush方法

      在文件的操作过程中, 对文件的操作不会立马写入磁盘保存, 一般情况下是在调用close()的时候写入磁盘保存

      如果需要立马写入磁盘保存, 就可以使用flush()方法来实现

    人若有恒 无所不成
  • 相关阅读:
    1.1图形验证码的生成
    1.3蓝图导入问题
    1.2数据库迁移
    1.1首页显示
    1.3 日志配置以及蓝图的抽取
    1.2 app工厂以及db问题的解决
    每日总结
    每日总结
    每日总结
    每日总结
  • 原文地址:https://www.cnblogs.com/weihuchao/p/6674754.html
Copyright © 2011-2022 走看看