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

 

#使用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\t\t\t\t\t\t\t\t说给自己听\n']
        
['\t\t\t\t\t\t---三毛\n']

 

 

发现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="\n\n梦想,可以天花乱坠"; 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()函数。

posted @ 2018-06-16 15:41  南邪  阅读(163)  评论(0编辑  收藏  举报