文件读写的基本描述:python
open/文件操做
f=open('/tmp/hello','w')
#open(路径+文件名,读写模式)
#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.经常使用模式
如:'rb','wb','r+b'等等函数
读写模式的类型有:spa
rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时建立新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )指针
注意:日志
一、使用'W',文件若存在,首先要清空,而后(从新)建立,对象
二、使用'a'模式 ,把全部要写入文件的数据都追加到文件的末尾,即便你使用了seek()指向文件的其余地方,若是文件不存在,将自动被建立。内存
f.read([size]) size未指定则返回整个文件,若是文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)
file.readline() 返回一行
file.readline([size]) 返回包含size行的列表,size 未指定则返回所有行
for line in f: print line #经过迭代器访问
f.write("hello\n") #若是要写入字符串之外的数据,先将他转换为字符串.
f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).
f.seek(偏移量,[起始位置])
用来移动文件指针
偏移量:单位:比特,可正可负
起始位置:0-文件头,默认值;1-当前位置;2-文件尾
f.close() 关闭文件字符串
读文件的方法:generator
read ()的方法是一次性把文件的内容以字符串的方式读到内存, 放到一个字符串变量中it
readlines()的方法是一次性读取全部内容, 并按行生成一个list ,
由于read()和readlines()是一次性把文件加载到内存, 若是文件较大, 甚至比内存的大小还大, 内存就会爆掉。 因此,这两种方法只适合读取小的文件。
实际工做中,会碰到读取10几G的大文件的需求, 好比说日志文件。 这时候就要用的新的读取文件的方法。 这里提供两种方法, 有简单,有复杂,但基本原理都是同样的。 就是利用到生成器generator。
python 读取大文件使用迭代器会减少内存的消耗
方法1:利用open(“”, “”)系统自带方法生成的迭代对象
使用with打开文件并将文件对于对象f当作迭代对象,for line in f 这种用法是把文件对象f看成迭代对象, 系统将自动处理IO缓冲和内存管理,当读取大文件时不会一次性将文件读取到内存中,形成内存爆掉,迭代器会将需求的内容逐次读入内存
with open(file,'r') as f:
for line in f:
print(line)
逐行读取文件内容,避免一次将文件内容所有加载到内存中;
方法二:将文件切分红小段,每次处理完小段内容后,释放内存
这里会使用yield生成自定义可迭代对象, 即generator, 每个带有yield的函数就是一个generator。