zoukankan      html  css  js  c++  java
  • python基础学习3-文件读写、集合、json、函数

     

    1       文件读写补充

    文件修改

    方法1:简单粗暴直接:

    1、  先获取到文件里面的所有内容

    2、  然后修改文件里面的内容

    3、  清空原来文件里面的内容

    4、  重新写入

    f = open('test1.txt','r+')
    f.seek(0)
    all_data = f.read()
    new_data = all_data.replace('123','python')
    f.seek(0)           #将指针移到最前面
    f.truncate()        #清空原来文件内容
    f.write(new_data)   #重新写入文件内容
    f.flush()
    f.close()

    方法2:高效的处理方式

    1、  先打开原来的文件,再打开一个空文件

    2、  循环处理原来文件里每一行数据,处理完之后写到新文件里

    3、  将原来的文件删除,将新文件名字修改成原来文件的名字

    import os
    with open('words.txt') as fr,open('words1','w') as fw:
        for line in fr:
            line = line.lstrip()    #去掉左边的空格
           
    if line:        #判断这一行是否有数据
               
    line = line.replace('','you')      #替换数据
               
    fw.write(line)      #写到新文件里面
    os.remove('words.txt')         #删除原来的文件
    os.rename('words1','words.txt')     #将新文件重命名为原来文件名

    使用with open方法打开文件会自动关闭,不需要在手动去关闭这个文件;

    f = open('笔记.txt')      #打开的文件称为文件句柄或文件对象

    for line in f:      #直接循环文件对象,每次循环的时候就是去的每一行数据
       
    print('line',line)

     

    2       集合、json模块

    集合作用:

    1、  天生去重

    2、  关系测试-交集,差集,并集,反向差集,对称差集

    nums = [1,2,3,2,3,4,1,5,6]
    print(set(nums))

    list = [1,2,3,4,5,3,6]      #列表
    list_dict = {2,3,4,3}
    list_2 = [2,3,5,7,8]
    list = set(list)            #将列表转换为集合
    list_2 = set(list_2)
    print('交集:',list.intersection(list_2))    #交集,取出重复数据
    print(list & list_2)  #这个也叫交集

    print('并集:',list.union(list_2))           #并集,去重统一展示
    print(list | list_2)  #这个也叫并集

    print('差集:',list.difference(list_2))      #差集,取出list中有的,list_2中没有的
    print(list - list_2)  #这个也叫差集

    list_3 = set([1,3,6])
    print('子集:',list_3.issubset(list))        #子集,list_3的值在list中全有,返回的是一个布尔类型的结果
    print('父集:',list.issuperset(list_3))      #父集

    print('对称差集:',list.symmetric_difference(list_2))        #对称差集,将listlist_2中互相没有的值都取出来,把两集合里都有的去掉
    print(list ^ list_2)  #这个也叫对称差集


    #
    集合操作
    list.add(123)   #每次只能添加一个
    print(list)

    list.update([888,999])    #可以同时添加多个
    print(list)

    list.remove(999)        #删除指定元素
    print(list)

    list.pop()          #随机删除
    print(list)

    list.discard()      #删除一个不存在的元素不会报错
    print(list)

    实例:

    #监控日志
    #1
    、如果一分钟之内某个ip访问超过100
    #2
    、就把他的ip找出来,split,取第一个元素
    #3
    、找出所有的ip,统计次数
    #4
    、判断每个ip次数大于100,就发邮件
    #5
    、记录文件指针,给下一次读的时候用
    #6
    、等待60s,重新读取文件

    import time
    point = 0        #存放的是文件初始的位置

    while True:
        with open('access.log') as f:
            f.seek(point)
            ip_info = {}        #存放ip和它出现的次数
           
    for line in f:
                ip = line.split()[0]
                if ip in ip_info:
                    #ip_info[ip] = ip_info[ip] + 1
                   
    ip_info[ip] += 1
                else:
                    ip_info[ip] = 1
            point = f.tell()   #获取当前文件指针的位置
           
    for k in ip_info:
                if ip_info.get(k) >= 100:
                    print('ip在攻击你%s'%k)
        time.sleep(60)       #等待60s

    json是一个字符串,只不过长的像字典;

    在json里只有双引号,没有单引号;

    import json
    user_info = '''                     
    {"test1":"123456","test2":"123456"}    
    '''
    user_dic = json.loads(user_info)        #json串(字符串)转换成字典
    print(user_dic)
    print('user_info',type(user_info))
    print('user_dic',type(user_dic))

    stu_info = {'zhangsan':{'cars':['BMW','Ben-z']}}
    stu_str = json.dumps(stu_info)      #把字典转换成json
    print('stu_str',type(stu_str))
    print(stu_str)
    f = open('stu.txt','w')
    f.write(stu_str)
    f.close()

    f = open('stu.json', 'w')
    json.dump(stu_info,f,indent=4) #不需要自己在write,人家会帮你写入文件,后面加入indent=4帮你自动进行缩进,4表示缩进4个字符

    3       函数

    1、函数就是一个功能,一个方法,简化代码

    2、函数必须得调用才会执行

    3、一个函数只做一件事

    4、重复的代码是低级的

    5、实现同样的功能,代码越少越好

    def say(name):                  #函数名,括号里写参数就是形参(形式参数即变量)
       
    print('%s hahaha'%name)    #函数体
    say('zhangshan')               #函数名里面加括号就是调用上面的函数,括号里面的参数是实参(实际参数)



    def say1(name,sex=''):                  #函数名,括号里写参数就是形参(形式参数即变量)
        #
    必填参数,如name
        #
    默认值参数,非必填,如sex=''
       
    print('%s hahaha  性别%s'%(name,sex))    #函数体
    say1('zhangshan')               #函数名里面加括号就是调用上面的函数,括号里面的参数是实参(实际参数)

    在函数里面的变量都是局部变量,它只能在函数里面使用,函数执行结束就没有这个变量了;

    返回值,如果需要用到函数的处理结果的话,就写return,不需要的话,那就不用写;函数里面如果碰到return,函数立即结束;

    # 函数立即结束def calc(a,b):

         res = a * b

         print(res)

         return res          #没有return返回时,函数返回的数据类型就是NoneType,有return的类型就是函数的结果类型

    cur_money = 8000

     nx = calc(1000,13)

    print(nx+cur_money)

     def my():

         for i in range(100)

             if i == 2:

                 return

     print(my())

    #写一个校验输入的字符串是否为小数的程序
    #
    思路:
    # 1
    0.12  1.23  -12.3只有一个小数点,判断小数点个数;
    # 2
    、正小数的情况下,小数点左边和右边都是整数的话,才合法,通过分割符去判断
    #3
    、负小数的情况下,小数点右边整数,左边必须是“-”开头,且只有一个负号;
            #-5.4
            #['-5','4']
            #[1:]
    def check_float(s):
        s = str(s)
        if s.count('.') == 1:
            s_list = s.split('.')
            #5.3  分割之后就是[5,3]

           
    left = s_list[0]        #小数点左边
           
    rigth = s_list[1]       #小数点右边
           
    if left.isdigit() and rigth.isdigit():
                return True
            elif
    left.startswith('-') and left.count('-') ==1 and left[1:].isdigit() and rigth.isdigit(): #left.count('-') ==1这个判断可以不用写
               
    return True

        return False

    print(check_float(1.8))
    print(check_float(-2.4))
    print(check_float('-s.5'))
    print(check_float('50.232ss'))
    print(check_float(-3-4.4-9))


    def my_file(name,content=None):
         with open(name,'a+') as f:
             f.seek(0)
             if content:
                 f.write(content)
             else:
                 return f.read()

  • 相关阅读:
    Servlet系列教材 (九)- 基础
    Servlet系列教材 (八)- 基础
    Servlet系列教材 (七)- 基础
    Servlet系列教材 (六)- 基础
    Servlet系列教材 (五)- 基础
    Servlet系列教材 (四)- 基础
    Servlet系列教材 (三)- 基础
    Servlet系列教材 (二)- 基础
    Servlet系列教材 (一)- 基础
    Tomcat系列教材 (八)- 部署J2EE应用
  • 原文地址:https://www.cnblogs.com/better0903/p/9221844.html
Copyright © 2011-2022 走看看