文件读写和修改

1.打开文件的三种模式 

1)读模式(r:只能读不能写,打开不存在文件会报错 )

f=open(r'C:UsersAdministratorDesktop课前须知.txt',encoding='utf-8')
result=f.read()
print(result)
f.close()

2)写模式 (w:只能写不能读 。会把原有内容覆盖掉,文件不存在会创建)

f=open(r'C:UsersAdministratorDesktop课前须知.txt','w',encoding='utf-8')
f.write('abc')
f.close()

3)追加模式(a: 只能写不能读 。不会清空原来内容,是在内容后面追加内容,文件不存在会创建)

f=open(r'C:UsersAdministratorDesktop课前须知.txt','a',encoding='utf-8')
f.write('abc')
f.close()

2.新三种模式

r+  只要和r有关,打开不存在文件都会报错 。

w+ 只有和w有关,都会清空原来的文件。

a+ 文件指针 seek()解决

# f = open(r'test.txt','a+',encoding='utf-8')
# f.seek(0)
#r就是原字符
# print(f.read())#读取文件里面所有的内容
# print('8====',f.readline())#读取一行的内容
# print('readlines',f.readlines())# f.read()
# f.seek(0)#移动文件指针
# print(f.read())
# f.close()

# f = open('test.txt','r+',encoding='utf-8')
# f.seek(0)
# f.write('111')
# f.close()

#文件指针

l = ['a
','b
','c
','e
','g
']
f = open('nhy.txt','w',encoding='utf-8')
# for i in l:
#     f.write(i+'
')

f.writelines(l)
#传一个list的话,他会自动帮你循环,把list里面每一个
#元素写到文件里面
f.close()
# f.write('sd')

3.练习

#监控服务器日志,找出每分钟访问超过100次的ip地址。

#1、每分钟读取一次文件,获取文件内容
#2、从文件内容里面找到ip地址
#3、判断每个ip出现的次数,如果超过100次,就找出来
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)

  4.文件修改 

#1、简单直接粗暴的方式

#1、读取内容
#2、替换
#3、清除原来文件的内容
#4、把新的内容写进去


# 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)

#第二种
#1、逐行处理
    #1、打开a文件,在打开一个b文件
    #2、从a文件读一行,修改,修改之后写到b文件里
    #3、删除a文件,把b文件的名字改成a文件
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')

5.不需要写关闭的文件打开方式

with open('test.txt') as f,open('nhy.txt') as f2:
    f.read()
    #这种写法不需要关闭,不需要f.close()
原文地址:https://www.cnblogs.com/Dorami/p/10932169.html