9、文件操作
open("filename",encoding)
data=open("filename",encoding='utf-8').read()
w 创建一个新文件。
r 读取 ,不可写
a ,追加 ,不能读
r+ 读取n行后,写仍然从文件末尾开始写
w+写读,创建一个新文件,写就只能追加到最后。
a+
rb 二进制文件读写(网络传输、二进制文件)
(不要编码方式)
wb
ru \r\n \n 统一成\n
wu
fp = open('filename','w',encoding='utf-8')#文件句柄 w创建一个新文件。
fp = open('filename','rb')
关闭文件
f.close()
读取行
fp.readline()
将文件的每行放一起组成一个列表
fp.readlines()#读小文件
练习:
读取在第十行显示分割线
fp=open('/Users/mac/PycharmProjects/myPython/day2/goods.txt','r+',encoding='utf-8') for index,line in enumerate(fp.readlines()): if index == 9 : print('---------我是分割线-----') else : print(line.strip())
高效,迭代器fp
fp=open('/Users/mac/PycharmProjects/myPython/day2/goods.txt','r+',encoding='utf-8') count =0 for line in fp : if count == 9: print('---------我是分割线-----') else: print(line.strip()) count += 1
光标移动
fp=open('/Users/mac/PycharmProjects/myPython/day2/goods.txt','r+',encoding='utf-8')
fp.read(5) fp.tell()#按字符计数
fp.seek(0)#光标回0.
fp.seekable()#终端设备不能移动光标。
fp.readable()
fp.writeable()
文件编码方式
fp.encoding()
fp.fileno()#系统中的文件句柄。
flush方法
fp.flush()#默认缓存满后再写入硬盘。flush可以即时写入硬盘
进度条
import sys,time for i in range(50): sys.stdout.write("#") sys.stdout.flush() time.sleep(0.1)
截断
fp.truncate()#清空
fp=open('/Users/mac/PycharmProjects/myPython/day2/goods.txt','a',encoding='utf-8') fp.truncate(10)#从文件开始到第10个字符
修改一个文件
1、加载到内存修改完覆盖原文件
如:vim
2、改完后,写入一个新文件,
f = open('goods.txt','r',encoding='utf-8') f_new = open('goods_new.txt','w',encoding='utf-8') for line in f: if "这个自行车是我的" in line : line = line.replace('是我','是Xiaochun') f_new.write(line)
f.close()
f_new.close()
程序练习:实现简单的shell sed的功能
import sys f = open('goods.txt','r',encoding='utf-8') f_new = open('goods_new.txt','w',encoding='utf-8') find_str = sys.argv[1] replace_str = sys.argv[2] for line in f: if find_str in line : line = line.replace(find_str,replace_str) f_new.write(line) f.close() f_new.close()
with 作用自动关闭文件
with open('goods.txt','r',encoding='utf-8') as f,open('goods_new.txt','r',encoding='utf-8') as f_new: f.readline()
with open('goods.txt','r',encoding='utf-8') as f,\ open('goods_new.txt','r',encoding='utf-8') as f_new: f.readline()