文件操作
流程:
1:打开文件,得到文件句柄并赋值给一个变量 2:通过句柄对文件进行操作 3:关闭文件模式解释 r(读) , w(写) ,a(附加)r+(读写的读), w+(读写的写),a+(读附加的附加)b表示以二进制模式打开文件(3.0里网络传输只能用此模式,或者视频音频等)
以上模式以二进制模式表示为:rb,wb,ab,rb+,wb+,ab+ 如何将文本以二进制写入文件 f = open('file','wb') f.write('hello world',encode()) 这里转换为二进制格式写入文件即可U表示在读取时,可以将\r \n \r\n 自动转换为\n
写法:rU 或者 r+U缓冲:
0:禁用缓冲 负数:使用系统默认缓冲 1:只缓冲1行数据 2+:指定缓冲空间大小打开文件举例: f1=open('/tmp/passwd','r')
方法:
read(): 将文件内容以字符串形式全部读取。readable():判断文件是否可读。write():写文件writeable():判断文件是否可写flush():刷新手工将内存中的文件内容写到硬盘上readline()用法:读取一行。
举例读取前5行:for i in range(5): file.readline()readlines():将文件内容以列表形式打印(这个方法效率低对大文件)举例打印文件前10行:for index,line in enumerate(f.readlines()): if index == 9: break print(line.strip()) 这种方法性能不好,不要用在大文件处理,因为会一次性读取所有文件内容。tell(): 显示当前指针在文件中位置(字节显示)
seek(offset[whence]) 指针偏移 whence:偏移量起点 0:从文件头 (默认位置) 1:从当前位置 2:从文件尾部 例如:f1.seek(0,2) offset:偏移数量seekable():判断文件中的光标是否可以移动,可以返回True,否则返回False.(linux中一切皆文件,终端设备在系统里也是文件,但是光标是不可以移动的。)encoding:打印文件的编码errors:异常处理fileno():返回文件句柄在内存中的编号(这个编号属于操作系统内部IO),一般不使用这个方法(忘掉它吧)。name:调用当前文件名称isatty():看终端设备(打印机,屏幕等终端),用于底层交互。close(): 关闭文件closed:判断文件是否关闭,返回(True/False)truncate():截断,如果不带参数会清空文件。带参数如:truncate(20):表示从文件开头往后截取20个字符。需要以a模式打开文件。注意:文件以r+模式打开文件,读取文件是按照正常方式从头开始读取,但中途写入还是会直接写到文件末尾。
打开读取文件效率最高的写法:
count = 0for line in f: if count == 9: print('----分隔符-----')print(line.strip())
continue print(line.strip()) count += 1这种方法是内存只保存一行,读取的一行覆盖上一行原理。文件修改方法:
只有同时打开2个文件,第一个是需要读取的源文件,第二个是写入内容的新文件,过程是读取源文件每行数据,如果符合修改需求,则修改,然后将每行数据写入新文件中。1 src_file = open('源文件名',encoding='utf-8') 2 dst_file = open('文件名.bak','w',encoding='utf-8') 3 4 for line in src_file: 5 if '准备修改的字符串' in line.strip(): 6 #注意:这里修改一行后一定要重新指定到一个变量 7 line = line.replace(准备修改的字符串,替换的字符串) 8 print(line.strip()) 9 dst_file.write(line)10 src_file.close()11 dst_file.close()
with : 可以自动在with执行完后自动关闭打开的文件
with open('file1','r',encoding='utf-8') as f1 ,\
open('file2','r',encoding='utf-8') as f2: #使用with可以同时打开多个文件功能,写法建议参考这里。
....
小技巧动态输出显示进度条
import sys,timefor i in range(10): sys.stdout.write('#') 动态输出到屏幕,不会换行 sys.stdout.flush() 刷新屏幕,显示动态输出 time(0.1) 为查看方便