python文件的读写

一、文件读写几种模式总结:

读模式: r 打开不存在的文件会报错、不能写(不能调用write方法),可以读(能调用read方法)

写模式: w # 1、打开不存在的文件,会新建一个文件,但每次打开都会清空原有文件内容

      # 2、不能读(不能调用read方法),可以写(能调用write方法)

追加模式 a # 1、打开不存在的文件,会新建,可以写(可以调用write方法)

      # 2、不能读(不能调用read方法)

读写模式 r+ # 1、能写能读,但每次都是重头写入,会覆盖原有的文件内容

      # 2、打开不存在文件的时候会报错

写读模式 w+ # 1、能读能写

      # 2、但读不到内容,因为每次打开w先把文件内容清空

追加读模式 a+ # 1、能读能写

       # 2、每次读的时候,文件指针是在文件末尾。如果需要重头读起,需要f.seek(0)将指针移到文件开始(注意在Python中,a或a+模式修改文件指针对于文件的写入没有影响,都会在结尾追加写入当文件写入数据后),在没有关闭文件前,此时写入的数据还在内存中,没有写入磁盘,当文件在其他地方打开的时候,是看不到新写入的数据,如果希望新写入的数据立即生效写入磁盘,需要用f.flush(),文件末尾用f.tell()

 

r = open('test.txt',encoding='utf-8')
r.read()#读取所有内容,也可以使用循环,循环出来就是一行一行的内容
for i in r.read():
    print()  #这样就可以打印出每行的内容

readline():一次读取文件的一行。如果文件指针在文件开始位置,则读取的是第一行数据

readlines():读取文件的所有行,并且以list形式返回

 

6.文件操作小代码:修改文件

with 操作会自动调用close(),无需手动写关闭文件操作

第一种方式:全部读取文件的内容后修改其内容,将原有文件内容删除,然后将修改的内容直接复制写进去

第二种方式(推荐):创建一个新的空文件,将修改的内容写入到新文件后,再删除原有的旧文件,将新文件更名成旧文件名

第一种:

f = open('nhy.txt','a+',encoding='utf-8')
f.seek(0)
result = f.read()
content = result.replace('xiaolan','dalan')#替换
f.seek(0)
f.truncate()#清空文件内容
f.write(content)
f.close()

f2 = open('nhy.txt','w')
f2.write(content)

第二种:
f = open('nhy.txt',encoding='utf-8')
f2 = open('nhy2.txt','w',encoding='utf-8')

for line in f:
    result = line.upper()
    f2.write(result)
f.close()
f2.close()

import os
os.remove('nhy.txt')
os.rename('nhy2.txt','nhy.txt')

监控日志:

import time
point = 0
while  True:
    ips = {}#存放所有的ip地址
    f = open('access.log',encoding='utf-8')
    f.seek(point)
    for line in f:
        if line.strip()!='':#判断是否不为空行
            ip = line.split()[0]
            if ip not in ips:
                ips.setdefault(ip,1)
            else:
                ips[ip]+=1
                # ips[ip]=ips[ip] + 1
    point = f.tell()#记录文件指针的位置
    for k,v in ips.items():
        if v>=100:
            print('有问题的ip地址是%s'%k)
    f.close()
    time.sleep(60)

指针:

指针是读取文件的时候会标记位置,比如我执行两次打印文件内容,但是他只打印一次出来,为什么呢,因为文件指针的缘故,因为第一次已经把全部读出来了,指针已经在文章末尾了,所以第二次就读取不到内容,所以我们需要重新在读取到内容,就需要把指针移到我们想要的地方

print(r.read())

print(r.read())

#############

print(r.read())

r.seek(0)#这个就是指针的函数,这样第二次就可以读取到了

f.tell()#这个函数就是获取指针的位置,如果下一次读取文件想从这个地方开始读取,我们就记录下指针的位置,把指针摆放在这个位置,就可以从固定的位置开始读取文件

print(r.read())

posted on 2019-05-27 20:27  彬小彬  阅读(183)  评论(0编辑  收藏  举报

导航