zoukankan      html  css  js  c++  java
  • python文件处理

    一、文件的打开方式

      文件打开方法: open(name[,mode][,buf][,encoding])

      参数解释:name 文件路径

           mode 打开方式

           buf:缓冲buffering大小

           encoding: 文件的编码格式

      文件打开方式:

      

     

    二、文件的读取

      read():读取整个文件

      read(size):读取size个字节

      readline([size]):读取一行

      readlines([size]):读取buffering个字节,返回每一行所组成的列表

      iter():使用迭代器读取文件

    给出一个文本文件:E://ME.txt,内容如下:

                                    说给自己听
                                    ---三毛
    如果有来生,
    要做一棵树,
    站成永恒,
    没有悲欢的姿势,
    一半在土里安详,
    一半在风里张扬,
    一半洒落阴凉,
    一半沐浴阳光,
    非常沉默非常骄傲,
    从不依靠,从不寻找。
    #使用read()方法
    f=open("E://ME.txt","r",encoding="utf-8"); data=f.read(); print(data);

    执行结果如下:
                                    说给自己听
                                    ---三毛
    如果有来生,
    要做一棵树,
    站成永恒,
    没有悲欢的姿势,
    一半在土里安详,
    一半在风里张扬,
    一半洒落阴凉,
    一半沐浴阳光,
    非常沉默非常骄傲,
    从不依靠,从不寻找。

    #使用read(size)方法
    f=open("E://ME.txt","r",encoding="utf-8");
    data=f.read(30);
    print(data);

    执行结果如下:

                                    说给自己听
                                    ---三毛

    #使用readline()方法

    f=open("E://ME.txt","r",encoding="utf-8");
    data=f.readline();
    print(data);

    执行结果如下:

                                    说给自己听

    #使用readline(30)方法:

    f=open("E://ME.txt","r",encoding="utf-8");
    data=f.readline(10);
    data1=f.readline(10);
    print(data);
    print(data1);

    执行结果如下:

                                    说
    给自己听

    #使用readlines()方法

    f=open("E://ME.txt","r",encoding="utf-8");
    data=f.readlines();
    print(data);

    执行结果如下:

    ['ufeff 说给自己听 ', ' ---三毛 ', '如果有来生, ', '要做一棵树, ', '站成永恒, ', '没有悲欢的姿势, ', '一半在土里安详, ', '一半在风里张扬, ', '一半洒落阴凉, ', '一半沐浴阳光, ', '非常沉默非常骄傲, ', '从不依靠,从不寻找。']

    #使用readlines(size)方法

    f=open("E://ME.txt","r",encoding="utf-8");
    data=f.readlines(1);
    data1=f.readline(2);
    data2=f.readlines(3);
    print(data);
    print(data1);
    print(data2);

    执行结果如下:

    ['ufeff 说给自己听 ']
            
    [' ---三毛 ']

    发现readlines(size)这个方法的运行结果和我们的预期不太一样。

    这是由于存在IO缓冲区,缓冲区的大小为:8192.

    #使用迭代器读取文件

    f=open("E://ME.txt","r",encoding="utf-8");
    iter_f=iter(f);#把文件对象转为迭代器对象
    for i in iter_f:
        print(i,end="");

    执行结果为:

                                    说给自己听
                                    ---三毛
    如果有来生,
    要做一棵树,
    站成永恒,
    没有悲欢的姿势,
    一半在土里安详,
    一半在风里张扬,
    一半洒落阴凉,
    一半沐浴阳光,
    非常沉默非常骄傲,
    从不依靠,从不寻找。

    使用read()/readline()/readlines()会把文件整个加载到内存中去,极大的浪费内存,我们采用迭代器的方式可以节约内存。

    三、文件写入

    write(str):将字符串写入文件

    writelines(strings):将多行写到文件

    #使用write()方法
    f=open("E://ME.txt","a+",encoding="utf-8"); data=" 梦想,可以天花乱坠"; f.write(data);

    此时,其实只是对内存中的数据进行了修改,磁盘中的数据并没有被修改。只有调动flush()/close()方法,修改后的数据才会写入磁盘。

    使用writelines()方法;
    f=open("E://ME.txt","a+",encoding="utf-8");
    
    data1=[
        "心,若没有栖息的地方,到哪里都是流浪",
        "飞蛾扑火时,必是极快乐幸福的",
        "今日的事情,尽心、尽意、尽力去做了,无论成绩如何,都应该高高兴兴地在床上恬睡。"
    ]
    f.writelines(data1);
    f.close()

    此时,其实只是对内存中的数据进行了修改,磁盘中的数据并没有被修改。只有调动flush()/close()方法,修改后的数据才会写入磁盘。
    python写磁盘时机
    1.主动调用close()/flush()方法,写缓存同步到磁盘
    2。写入数据量大于等于写缓存,写缓存同步到磁盘

    四、文件指针

    文件指针操作:

        seek(offset,[whence])

        offset:偏移量,可以为负数

        whence:偏移相当位置,其取值有以下三个:

            1、os.SEEK_SET:相对文件起始位置

            2、os.SEEK_CUR:相对文件当前位置

            3、os.SEEK_END:相对文件结束位置

        tell():tell函数的作用是显示当前指针位置

          

    import os;
    f=open("E://ME.txt","r+",encoding="utf-8");
    f.read(3);
    print(f.tell());
    f.seek(0,os.SEEK_SET)
    print(f.tell());

    执行结果为:
    5
    3

    使用seek()函数,我们可以定义到文件的任意一个位置。

    五、文件关闭

    为什么要关闭文件?

    1.将写缓存同步到磁盘

    2、linux系统中,每个进程打开文件的个数是有限制的,如果超过了系统限制,再打开文件就会失败。

    关闭文件,其实就是调用close()函数。

    在我身后,微笑地活下去吧。
  • 相关阅读:
    mysql存储过程分库分表
    上取整与下取整的转换
    《windows内核安全与驱动开发》ctrl2cap中的ObReferenceObjectByName疑问
    JavaScript基础入门教程(六)
    Unicode中的BOM
    JavaScript基础入门教程(五)
    JavaScript基础入门教程(四)
    JavaScript基础入门教程(三)
    JavaScript基础入门教程(一)
    web及网络基础
  • 原文地址:https://www.cnblogs.com/L-C98/p/9190672.html
Copyright © 2011-2022 走看看