python-文件处理
seek()
#获取文件中的最后一行 seek() f = open('t.txt','rb') #文件句柄 for i in f: offs = -10 while True: f.seek(offs,2) data = f.readlines() if len(data) > 1: print('找到了我在的数据:\n%s'%(data[-1].decode('utf-8'))) break offs*=2
open()
1.打开文件
2.操作文件
3.关闭文件
文件操作
文件操作的方法
读取的方法,是通过文件中光标的位置开始读取, #读取文件,里面添加参数:python3读的是字符,python2读的是字节。 f.read() #按行读取文件 f.readline() #读取所有的行,拿到的是一个列表,按文件的原样式去读取, f.readlines()
#将光标移到你指定的参数位置,是按字节移动的,与read()方法不同。seek:
f.seek(0)
#获得文件指针位置
f.tell()
#刷新输出的缓存
f.flush()
#关闭文件的程序
f.close()
#添加多行
f.writelines(['11111\n','22222\n']) #写多行需要添加【】遍历【里面的元素】
da.readable()#返回bool值,是否能读 da.writable()#返回bool值,是否能写
文件的基本模式
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则创建;存在则清空内容】不关闭的时候,就不会覆盖写的内容,可以写多条print() x, 只写模式【不可读;不存在则创建,存在则报错】 a, 追加模式【可读; 不存在则创建;存在则只追加内容】
带'+'的模式,*+是以*为主的
r+ :可读可写 写是已追加的方式 w+:可读可写 写是覆盖的 seek()调整 a+:可读可写 ,追加到文件最后 seek()调整
"b"表示以字节的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
操作的方法实例
read()读操作
f = open('test',encoding='utf8')
data = f.read()
print(data)
f.close()
write()写操作,覆盖
如果没有文件的话,就自动创建文件
f = open('test_write','w',encoding='utf-8')
f.write('hello wold !你好!')
ps:程序没有结束的话,可以反复往文件添加内容,且不会被覆盖
f = open('test1_write','a',encoding='utf-8')
f.write('中国')
f.write('中国1')
f.write('中国2')
f.write('中国3')
f.write('中国4')
a()操作
追加,不会覆盖原有的文件内容
f = open('test_write','a',encoding='utf-8')
f.write('中国')
文件读取方法的操作
读取前5行
with open('test3_write','r',encoding='utf-8') as f:
for i in range(5):
print(f.readline(),end='')
结果:
中国1
中国2
中国3
中国4
中国5
#按行读取文件的笨办法
with open('test3_write','r',encoding='utf-8') as f:
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
小程序
给文件指定的一行末尾添加字符
count = 0
for i in f:
if count == 3:
i = ''.join([i.strip(),'北京'])
count +=1
print(i)
进度条程序的编写
import sys,time for i in range(100): s = ('\r%d%% %s'%(i,'#'*i)) sys.stdout.write(s) time.sleep(0.5) sys.stdout.flush()
文件查看
while 1:
m = input('please input..')
li = []
flag = False #标志位
with open('haproxy.conf', encoding='utf-8') as f:
for i in f:
if i.startswith('backend') and m in i: #第一步,判断是否满足条件,开始语句,输入的语句,第二次在循环的时候就不会满足这个条件
flag = True #打开
continue #退出本次的循环,
if i.startswith('backend') and flag: #第二步,一直循环到下次两个条件都满足了,就退出循环
break
if flag: #第三步,将我输入的内容下面的文本保存到[]中
li.append(i.strip())
for i in li:
print(i)

浙公网安备 33010602011771号