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)

  

posted @ 2017-03-14 22:47  beiguuu  阅读(107)  评论(0)    收藏  举报