zoukankan      html  css  js  c++  java
  • python使用笔记003-文件操作(一)

    文件操作分为:

    1、打开文件,如果文件在当前目录下直接写文件名,如果文件在其他目录下写绝对路径

    2、读/写文件

    3、关闭文件

    一、文件打开模式

    # 'r':只读,文件读取后,会有文件指针记录读取文件的行数
    # 'w':只写,会把以前的内容清空掉,建议写新文件时,使用w模式
    # 'a':只追加
    # 'r+' == r+w(可读可写,文件若不存在就报错(IOError))
    # 'w+' == w+r(可读可写,文件若不存在就创建)
    # 'a+' ==a+r(可追加可写,文件若不存在就创建)
    # 对应的,如果是二进制文件,就都加一个b就好啦:
    # 'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

    二、读文件

     1 f = open('a.txt','r',encoding='utf-8')#打开模式r w a
     2 result1 = f.readline()#读文件,一次只读一行
     3 print(result1)
     4 result = f.read()#读文件,获取文件里的全部内容
     5 result2 = f.readlines()#读文件,把文件里的内容放到一个list里,每一行是一个元素
     6 #f.read(),f.readlines()这两个方法当文件很大时,会占用很大的内存
     7 print(result2)
     8 #处理大文件的时候,循环读取
     9 for line in f:
    10     print(line)
    11 f.close()#关闭文件

    三、写文件

    1 f1 = open('a1.txt','w',encoding='utf-8')#打卡模式r w a
    2 f1.write('12')#这个是一次写一行
    3 #print(f.read())
    4 l = ['fdslfjs
    ','fdsrewr
    ','fdsfsdfrere
    ']
    5 f1.writelines(l)#将列表写到文件中
    6 #循环写入
    7 for i in l:
    8     f.write(i)
    9 f1.close()

    四、监控日志小练习

     1 #1、监控,一直在运行,死循环,每分钟读一次文件
     2 #2、第一次运行,读取文件所有的内容,从文件内容里获取到IP地址,及每个IP地址出现的次数
     3 #3、判断每个IP地址出现的次数,如果大于大于50次,那么发短信告警
     4 #4、等待60秒,继续重复上面的操作,读文件,获取内容
     5 import time
     6 point = 0#最前面
     7 while True:
     8     ip_list = {} #ip:ipcount
     9     f = open('access.log', encoding='utf-8')
    10     f.seek(point)#移动文件指针到哪个位置
    11     for line in f:
    12         ipStr = line.split()[0]
    13         if ipStr not in ip_list:
    14             ip_list[ipStr] = 1#不存在则加入统计
    15         else:
    16             ip_list[ipStr] += 1#存在则修改统计次数
    17     point = f.tell()#当前文件指针的位置
    18     f.close()
    19     for ip in ip_list:
    20         ipCount = ip_list.get(ip)#获取IP的统计次数
    21         if(ipCount >= 50):
    22             print('请求次数超过5次的IP:%s,请求次数为:%s'%(ip,ipCount))
    23 
    24     time.sleep(60)

    五、排序小练习

     1 #根据每个人跑步的公里数 重新排序每个人的排名,格式 1. 毛多锁 500km
     2 #1、打开文件
     3 #2、将文件的内容循环读取,存放到字典中
     4 #3、给字典排序
     5 #4、将排序好的字典写到一个新的文件中
     6 
     7 run_scores = {}
     8 f = open('数据.txt',encoding='utf-8')
     9 for userinfo in f:
    10     temp1 = userinfo.split()#用空格分割,将名字和跑步公里数分割
    11     run_scores[temp1[1]] = float(temp1[2])#将文件中的内容放入字典中
    12 
    13 f.close()#关闭文件
    14 print(run_scores)
    15 #将字典进行降序排序
    16 run_scores_sort = dict(sorted(run_scores.items(), key=lambda x: x[1],reverse=True))
    17 print(run_scores_sort)
    18 new_file = open('排序.txt','w',encoding='utf-8')#打开一个新的文件,用来存放排序后的内容
    19 count = 0#定义编号
    20 for temp2 in run_scores_sort:#遍历排序后的字典
    21     count += 1
    22     runScore = run_scores_sort[temp2]#获取跑步总公里数
    23     result = '%d. %s %.2fkm
    ' % (count,temp2,runScore)
    24     print(result)
    25     new_file.write(result)#将排序后的结果写入新的文件
    26 
    27 new_file.close()

    执行结果如图所示:

    六、注册小练习

     1 #注册用户,注册的逻辑和以前一样,注册成功的用户写到users.txt里面,写的数据格式和文件里面的一样
     2 #1、输入注册的账号
     3 #2、注册的账号不能为空
     4 #3、注册的账号不能存在于users.txt文件中
     5 #4、注册的密码,确认密码不能为空
     6 #5、密码与确认密码一致,才能注册成功
     7 #6、将注册的账号,密码追加到users.txt文件中
     8 f = open(r'users.txt', 'r', encoding='utf-8')  # 将打开文件模式定义为r:只读
     9 results = f.readlines()#将文件内容读取到list中
    10 f.close()  # 关闭文件
    11 for i in range(3):
    12     checkUser = False#定义一个检查用户是否存在的flag
    13     username = input('请输入注册的账号:').strip()#获取输入的账号
    14     if username:#注册账号不为空,则继续验证
    15         for line in results:#循环读取文件,检查注册账号是否存在
    16             userinfo = line.split(',')#分割
    17             if username == userinfo[0]:
    18                 checkUser = True
    19                 print('输入的账号已存在!!!')
    20 
    21         if not checkUser:#当用户不存在时,进行注册
    22             password = input('请输入注册的密码:').strip()  # 获取输入的密码
    23             rePassword = input('请输入确认密码:').strip()  # 获取输入的确认密码
    24             if password and rePassword:
    25                 if password == rePassword:
    26                     print('恭喜你,注册成功!')
    27                     new_file = open(r'users.txt', 'a', encoding='utf-8')  # 将打开文件模式定义为a:可追加
    28                     tempResult = '%s,%s
    ' % (username, password)
    29                     print(tempResult)
    30                     new_file.write(tempResult)
    31                     new_file.close()  # 关闭文件
    32                     break
    33                 else:
    34                     print('两次输入的密码不一致!')
    35             else:
    36                 print('密码/确认密码不能为空')
    37     else:
    38         print('输入的账号不能为空')
    39 
    40 else:
    41     print('错误次数已达上限!')
  • 相关阅读:
    [Chapter 3 Process]Practice 3.4 Describe what happens when a context switch occurs if the new context is already loaded into one of the register sets.
    [Chapter 3 Process]Practice 3.3 Discuss three major complications that concurrent processing adds to an operating system.
    爬取:中国大学排名
    基础统计学--复习
    pandas之数据结构
    numpy之初探排序和集合运算
    numpy之统计函数和布尔数组方法
    numpy之meshgrid和where
    numpy之通用函数ufunc
    numpy之转置(transpose)和轴对换
  • 原文地址:https://www.cnblogs.com/cjxxl1213/p/12782628.html
Copyright © 2011-2022 走看看