• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
带着兔子去拔牙
博客园    首页    新随笔    联系   管理    订阅  订阅

第九节。 文件读写

持久化保存,需要保存在硬盘中

文件的读取:

#打开文件

#读/写文件

#关闭文件

读文件

用r

调用open函数(‘打开文件绝对地址,‘读,写模式’,‘encoding:utf-8’)

eg:

read#打印全部

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','r',encoding='utf-8')

result= f.read()#读文件,获取文件里面的全部内容

print(result)

f.close()#关闭文件

readline #只读取一次只读取第一行

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','r',encoding='utf-8')

result= f.readline()#读文件
print(result)
print(f.readline())#打印下一行
f.close()#关闭文件

readlines#打印去全部内容,返回的是一个list,每行的内容放是list一个元素

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','r',encoding='utf-8')

result= f.readlines()#读文件
print(result)

f.close()#关闭文件

 

文件指针:记录读在哪一行

大文件处理:

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','r',encoding='utf-8')
for line in f :
    print(line)
f.close()

 

写文件:

写文件用w,会清空之前的内容清空

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','w',encoding='utf-8')
f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','w',encoding='utf-8')
f.write('你好啊\n,你真好\n')
f.close()
#传字符串直接用writelines()
#传数组用write
f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','w',encoding='utf-8')
l=['a\n','b\n']
for i in l:
     f.write(i+'/n')#或者用这种
f.readlines(l)

 

 a模式:

追加模式

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','a',encoding='utf-8')
f.write('我啊')
f.close()

 

 r+(可以写如果这个文件不存在,会报错,有文件会写在最前面),读的没有问题。

会覆盖第一行

 

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','r+',encoding='utf-8')
f.write('~~~')
print(f.read())
f.close()

 

 w+:之前的文件会被清空

f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','r+',encoding='utf-8')
f.write('~~~')
print(f.read())
f.close()

a+:
可以读可以写
f = open(r'C:\Users\admin\Desktop\新建文本文档.txt','a+',encoding='utf-8')
f.seek(0)
f.truncate #清空文件
print(f.read())
f.write('xxx') f.close()

 

 修改文件

 1.简单粗暴(小文件用这种方法 )

1.读取文件所有内容

2.repalace

3.清空文件

4.把新的内容写进去

replace
#修改
with open  (r'C:\Users\admin\Desktop\新建文本文档.txt','r+',encoding='utf-8')as f:
    content = f.read()#读文件
    new_content = content.replace('你说','说我')#修改
    f.seek(0)#移动文件直到最前面
    f.truncate()#清空文件
    f.write(new_content)
f.flush()如果没有看到数据变,用flush 立即刷新缓冲区的内容,写到磁盘上

 

效率高一点的方法

 1.两个文件操作

r模式打开a文件,w模式打开b文件

支行读取a文件的内容,读完之后替换内容

把a文件删掉,把b文件的名字改成a

import os #删除文件

with open (r'C:\Users\admin\Desktop\新建文本文档.txt','r+',encoding='utf-8')as f1,open(r'C:\Users\admin\Desktop\ha.txt','w',encoding='utf-8')as f2: for line in f1: new= line.replace('说我','nihao ') f2.write(new)
os.remove(
r'C:\Users\admin\Desktop\新建文本文档.txt')
os.remove(
r'C:\Users\admin\Desktop\ha.txt',(r'C:\Users\admin\Desktop\ha.txt')

 

 

 

 

# 1.
# 监控,一致在云运行,死循环,每分钟读一次
#
# 2.
# 第一次运行,读取文件所有的内容,从文件内容取到ip, 每个IP出现的次数
#
# 3.
# 判断每个ip地址出现的次数,如果大于50次,那么发送报警
#
# 4.
# 等待60S,继续重复
import time
point = 0#最前面的位置
while True:
    f = open(r'C:\Users\admin\Desktop\access.log',encoding='utf-8')
    f.seek(point)#移动文件指针到那个位置
    ip_infos = {}
    for line in f :
        ip = line.split()[0]
        if ip not in ip_infos:
            ip_infos[ip] =1
        else:
            ip_infos[ip]+=1
    point = f.tell()#当前文件指针的位置
    for ip in ip_infos:
        count = ip_infos.get(ip)
        if count >=50:
            print('ip地址{}有问题,请注意.format(),ip')
    f.close()
    time.sleep(60)

 

 

 

 

 

 

 

 

 

其他问题:

如果出现这样报错,将本文 另存为将格式改utf-8

"D:\Program Files (x86)\Python\Python37-32\python.exe" D:/Users/admin/PycharmProjects/untitled4/w.py
Traceback (most recent call last):
  File "D:/Users/admin/PycharmProjects/untitled4/w.py", line 46, in <module>
    e= f.readline()#读文件
  File "D:\Program Files (x86)\Python\Python37-32\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte

 

posted @ 2020-05-13 09:24  带着兔子去拔牙  阅读(258)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3