码迷,mamicode.com
首页 > 其他好文 > 详细

文件的操作

时间:2018-11-28 23:43:44      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:color   \n   取出   写文件   trunc   打开   等于   文件名   open   

文件的读写模式:

只读:r

只写:w

追加:a

读写模式:r+

写读模式:w+

追加读模式:a+

1、默认不写的话,就是只读模式

f=open(‘user.txt‘)

 

2、r模式打开一个不存在的文件,会报错

 

3、r模式打开文件后,不能进行写的操作

比如:

f=open(‘user.txt‘)

f.write(‘test‘)  #会报错,提示不能进行写的操作

 

4、w模式下打开一个不存在的文件,会创建一个新文件

f=open(‘user1.txt‘,‘w‘)  #会创建一个user1.txt的文件

f.write(‘test‘) #往文件中写入内容

 

5、w模式打开文件后,不能进行读的操作

f=open(‘user.txt‘,‘w‘)  

f.read() #提示不能进行读的操作

 

6、w模式下打开一个存在的文件,会清空文件中的内容

f=open(‘user.txt‘,‘w‘) #会把文件中的内容进行清除

 

7、a模式下打开一个不存在的文件,会新建一个文件

f=open(‘user2.txt‘,‘a‘) #会新建一个user2.txt的文件

 

8、a模式打开文件后,不能进行读的操作

 

9、r+读写模式下打开文件,可以进行读的操作,也可以进行写的操作,打开不存在的文件,会报错

f=open(‘user.txt‘,‘r+‘) #以读写的模式打开一个存在的文件

f.read() #可以进行读的操作

f.write()#可以进行写的操作

 

10、w+写读模式打开文件,如果打开已存在的文件,会清空文件的内容,读的内容是空的

如果打开一个不存在的文件,会创建一个新的文件

f=open(‘user.txt‘,‘w+‘) 

f.read() # 读到的内容是空的

 

11、a+模式打开文件,能读能写,但是读不到内容,因为文件指针在末尾

需要把指针移到开头,才能读到内容

f=open(‘user.txt‘,‘a+‘)

f.seek() #把指针移到开头

f.flush() #刷新缓冲区,立即写到磁盘上

f.read() #可以读到文件中的内容

 

12、read() 读取所有的内容,将文件内容放在一个字符串变量中

     readline() 读取一行的内容

    readlines() 读取文件里面所有的内容,把每行的内容放到一个list里面

 

13、如果文件中有中文,读写文件时,加上encoding=‘utf-8‘

 

14、用open打开文件时,每次打开后,使用完成后,必须在最后,关闭掉文件f.close()

比如:

f=open(‘test.txt‘)

f.read()

f.close()

每次使用完文件后,怕忘记关掉文件,就引入了with..open,无需另外进行关闭的操作

with  open(‘user.txt‘)  as  f:

  f.read()

     .....

15、高效读取文件

直接循环f对象

with open(‘user.txt‘) as f:

  for line in f:

    print(f)

16、判断是否读到文件的末尾

#一行一行的读取,读到的值为空时,就结束循环

f=open(‘test2.txt‘,‘a+‘)
d={}
while True:#第一种,要求文件里面不能有空行
line=f.readline().strip()
  if line:
   user,password=line.split(‘,‘)
  d[user]=password
     else:
break

17、一行一行的往文件中写入内容

l=[‘1\n‘,‘ww\n‘]

f.writeline(l)#把list里面的每个元素都写进到文件中

 

18、修改文件

两种方式:

第一种:修改文件的内容,把原来的内容拿过来,进行替换,替换完成后,清空原有文件,再把新的文件内容写进去

with open(‘user.txt‘,‘a+‘,encoding=‘utf-8‘) as fw:

  fw.seek(0) #指针定位到开头

  reslut=fw.read()  #读取所有的内容

  new_result=result.replace(‘11‘,‘123456‘) #把11 替换成123456

  fw.seek(0)

   fw.truncate() #清空文件内容

  fw.write(new_result) #把新文件内容写入到文件中

 

第二种方式:打开一个已存在的文件和不存在的文件,一行一行的读取出来,然后进行替换,替换完成后,再一行一行的写入到新的文件中,删除旧的文件,再重新命名新的文件为之前文件的名字

import os

with open(‘user.txt‘,encoding=‘utf-8‘)  as fr,open(‘.user‘,‘a+‘,encoding=‘utf-8‘) as fw:

  for line in fr:

    new_line=line.replace(‘123456‘,‘12345678‘) #替换内容

    fw.writelines(newline)

os.remove(‘user.txt‘) #删除文件

os.rename(‘.user‘,‘user.txt‘)  # 重新命名成之前的文件名字

 

练习题:

文件内容:技术分享图片

#把文件里面,没有交作业的人名字后面加上没有交
# 已经交作业 ,加上交了
#1、读取文件
#2、按照空格分割每个人的作业信息
#3、分割文件后,判断长度是否等于2,如果有,就写入已交,没有就没有交
代码如下:
import os
with open(‘stu.txt‘,encoding=‘utf-8‘) as fr,open(‘.stu‘,‘w‘,encoding=‘utf-8‘) as fw:
for line in fr:
stu=line.split() #以空格分割
# print(stu)
if len(stu)>1:
stu[-1]=‘已交\n‘
# new_line=line.replace(‘1‘,‘已交作业\n‘)
else:
stu.append(‘未交作业\n‘)
fw.writelines(stu)
os.remove(‘stu.txt‘)
os.rename(‘.stu‘,‘stu.txt‘)

 

 19、监控日志的练习题

#每分钟监控服务器日志,IP请求超过200次的,加入黑名单
#1、读文件,获取到每行的内容 open readlines
#2、找到IP地址,分割字符串,按照空格,取第一个元素,split
#3、把IP存在字典里面,每个IP出现一次,IP次数就加1
# 判断IP的出现的次数,200次{‘ip‘:1,‘ip2‘:2}
#4、判断IP次数是否大于200,大于200,就加入黑名单
代码如下:
import time
point=0
while True:
ips={} #存放IP的字典
f=open(‘access.log‘,encoding=‘utf-8‘) #打开文件
# f.readlines()
f.seek(point)
for line in f.readlines(): #循环获取每一行
ip=line.split()[0] #获取到ip
print(ip)
if ip not in ips: #如果字典中没有这个ip,就直接新增一个key,value,否则数量就+1
ips[ip]=1
else:
ips[ip]+=1
point=f.tell() #记录读完之后的文件值
for k ,count in ips.items():
if count>=200:
print(‘[%s]加入黑名单‘%ip)
time.sleep(60)

 

 

 

文件的操作

标签:color   \n   取出   写文件   trunc   打开   等于   文件名   open   

原文地址:https://www.cnblogs.com/qiuqiu64/p/10035538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!