文件和流open()
流:
打开文件:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None),打开一个文件并返回相应的对象;
file:文件名;
mode:打开模式,默认只读;
buffering:设置缓冲;
encoding:设置编码;
errors:报错级别;
newline:区分换行符;
closefd:传入的file参数类型;
opener:
mode参数:
r:读取模式(默认);
w:写入模式;文件存在从头开始写入,不存在则创建后写入;
x:新建一个文件写入,存在则异常
a:附加写入,不存在则创建后写入;
b:二进制模式;
t:文本模式;
+:打开一个文件进行更新(与其他模式结合使用);
r+:打开文件进行读写,读数据时从头开始读,写入时从最后开始写;
w+:打开文件进行读写,光标在开头,文件有内容则删除;
a+:打开文件进行读写,光标在结尾,从最后继续追加;
常用方法:fo=open('filename')
fo.close():关闭文件,对文件操作完必须要关闭打开的文件; fo.flush():刷新文件内部缓冲,将内部缓冲区数据立刻写入文件; fo.fileno():返回一个非0整型的文件描述符; next(fo):返回文件下一行; fo.read([size]):读取指定的字节数,英文与中文都是一个字节,不指定或为负则返回全部,游标跟随移动; fo.readline([size]):读取整行包括\n,如果指定则返回字节数,游标跟随移动; fo.readlines():读取所有行包括\n,返回一个以每行为元素组成的列表,此时数据会全部加载入内存; fo.seek(offset[,whence]):方法用于移动文件读取指针到指定位置,offset偏移量,whence偏移的起始位置,0开头、1当前、2末尾; fo.tell():返回当前的位置数;英文占一个字节,utf-8中文占三个字节; fo.wirte(str):将字符串写入文件,文件关闭刷新之后,字符串才真正被写入; fo.wirtelines([str]):向文件中写入一序列的字符串,换行需要制定换行符,["hello\n","world"]; fo.truncate([size]):从文件首字符开始截取指定的字符数,后面的字符会被删除,无参数则从当前位置开始; fo.isatty():检测文件是否连接到一个终端设备,是返回True;
如果对一个文件进行操作,首先要打开文件,然后操作文件,最后关闭文件。
# 打开文件,拿到文件句柄数 f = open('testfile','r+',encoding="utf8") # 对文件进行操作 for line in f: pass # 关闭文件 f.close()
可以使用with语句操作文件,with语句结束时默认关闭文件
with open('file1') as f1, open('file2') as f2: for line in f1: f2.write(line)