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()函数。