• day4


    #文件操作

    sample(序列a,n) #从序列a中随机抽取n个元素,并将n个元素以list形式返回
    ','.join() #以某个指定的分隔符将list变成字符串
    import string,random
    f=open('email.txt','w')
    for i in range(10):
        u=''.join(random.sample(string.ascii_letters+string.digits,7))  #sample(seq, n)
        f.write(u+' ')

    fw=open('nhy','w')
    fw.write('sssssss')
    fw.flush() #将缓存区里面的数据立即写到磁盘上
    fw.close()

    with open('nhy','w') as fw,open('nhy2','w') as fw2: #使用with打开多个文件,且能自动关闭文件
        fw.write('xxx')

    #修改文件
    # 1.简单粗暴直接的方式
    1.先获取到文件里面的所有内容
    2.然后修改内容
    3.清空原来文件里面的内容
    4.重新写入
    f = open('users.txt','a+') #打开文件
    f.seek(0) #移动指针
    all_f=f.read() #读文件
    new_f=all_f.replace('123456','python') #修改文件内容
    f.seek(0) #读文件后指针就在最后面
    f.truncate() #清空文件内容
    f.write(new_f) #重新写入
    f.flush()
    f.close()
    # 2.高效的处理方式
    # words words
    1.先打开原来的文件,再打开一个空文件
    2.循环处理原来文件里面每一行数据,处理完之后,写到新文件里面
    3.把原来的文件删除,把新文件的名字改成原来文件的名字

    1、去掉前面的空格
    2、把空行去掉
    3、你替换you
    4、写到新文件里
    5、把原来的文件删除,把新文件的名字改成原来文件的名字
    import os
    with open('words') as fr,open('.words','w') as fw: #打开多个文件
        for line in fr: #使用for循环读每行数据
            line=line.lstrip() #去掉左边的空格
            if line: #跳过空行
                line=line.replace('你','you') #修改文件
        fw.write(line) #写入新文件
    os.remove('words') #删除源文件
    os.rename('.words','words') #重命名文件

    # 1、监控日志
    # { '192.168.1.1':0,'192.158.1.1':2 }
    # [192,]
    # 1、如果一分钟之内某个ip访问超过100次
    # 2、就吧他的ip找出来,split,取第一个元素
    # 3、找出所有的ip,统计次数
    # 4、判断每个ip次数day100,就发邮件
    # 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:
                p=line.split()[0]
                if ip in ip_info:
                    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)

    # 写一个注册小程序,注册成功后把账号/密码存到文件里
    all_users={}
    f=open('users.txt','a+') #文件句柄,文件对象
    for i in range(3):
        u = input('user:').strip()
        p = input('p:').strip()
        cp = input('cp:').strip()
        if not u or not p or not cp:
           print('账号、密码不能为空')
        elif u in all_users:
            print('该用户已经被注册!')
        elif u not in all_users and cp==p:
            info = '%s,%s '%(u,p)
            f.write(info)
            break
    f.close()


    #写一个登录小程序,登录时从文件里获取账号密码,并判断
    all_users={}
    f=open('users.txt','a+')
    f.seek(0)
    for line in f:           #直接循环文件对象,每次循环的时候就是取的每一行数据
        line=line.strip()
        line_list=line.split(',')
        username=line_list[0]
        passwd=line_list[1]
        all_users[username]=passwd

        for i in range(3):
            u = input('user:').strip()
            p = input('p:').strip()
            if not u or not p:
                print('账号/密码不能为空')
           elif u not in all_users:
                print('用户不存在')
           elif p!=all_users.get(u):
                print('密码错误')
           else:
                print('登录成功')
                break
    f.close()


    # json
    json是一个字符串,只不过长得像字典
    在json串里只能写双引号


    # json.loads()的用法-把json串转成字典:
    # 把json串(字符串)转成字典
    import json
    user_info='''
    {"nhy":"123456","lxy":"456789"}
    '''
    user_dict=json.loads(user_info)                      #把json串(字符串)转成字典

    # 把文件里的json串转成字典
    import json
    f=open('stu.txt')
    res=json.loads(f.read())       #使用json.loads()方法需要自己先读一次,入参是字符串

    import json
    f=open('stu.txt')
    res=json.load(f)                   #使用json.load()方法这个是直接从文件里拿,入参是文件,不需要再读一次文件了,json帮你读


    # json.dumps()的用法-把字典转成字符串:
    # 把字典转成字符串
    import json
    stu_info = { 'laowang':{ 'cars':['BMW','Ben-z'] } }
    stu_str=json.dumps(stu_info)                 #把字典转成json串(字符串)

    #把字典转成的json串写到文件里
    import json
    stu_info = { 'laowang':{ 'cars':['BMW','Ben-z'] } }
    stu_str=json.dumps(stu_info)                     #使用json.dumps()方法,需要自己写write,入参是字典
    fw=open('stu.txt','w')
    fw.write(stu_str)
    fw.close()

    import json
    stu_info = { 'laowang':{ 'cars':['BMW','Ben-z'] } }
    fw=open('stu.txt','w')         #打开一个文件
    json.dump(stu_info,fw,indent=4)     #使用json.dump()方法不需要再write了,只需要传入文件对象,会自动写入文件

    #json写上周的作业
    import json
    f=open('users.txt','a+') #文件句柄,文件对象
    f.seek(0)
    all_users=json.load(f)
    for i in range(3):
        u=input('user:').strip()
        p=input('p:').strip()
        cp=input('cp:').strip()
        if not u or not p:
            print('账号/密码不能为空')
        elif u in all_users:
            print('该用户已经被注册')
        elif u not in all_users and cp==p:
            all_users[u]=p
            print('恭喜注册成功!')
            break
    f.seek(0)
    f.truncate()
    json.dump(all_users,f,indent=4)
    f.close()

    # 集合
    1.天生去重,可以循环
    2.集合也是无序的

    nums={6,7,1,2,3,4,5}
    nums2={1,8,7,12}
    nums3={1,2,3,4}

    # 循环
    for n in nums:
    print(n)

    # 交集
    print(nums.intersection(nums2)) #取2个集合里面都有的
    print(nums & nums2) #取2个集合里面都有的

    # 并集
    print(nums.union(nums2)) #合并到一起之后,再去重
    print(nums|nums2) #合并到一起之后,再去重

    # 差集
    print(nums.difference(nums2)) #取在num中存在,在num2里面没有
    print(nums-nums2) #取在num中存在,在num2里面没有

    # 对称差集
    print(nums.symmetric_difference(nums2)) #把俩集合里面都有的去掉
    print(nums^nums2)

    # 子集
    print(nums3.issubset(nums)) #判断nums3是否是nums的子集

    # 父集
    print(nums.issuperset(nums3)) #判断nums是否是nums3的父集

    # 新建
    set1 = set() or set1 = {1,2,3}

    # 增
    nums.add(8) #增加一个元素
    nums.update([9,10]) #增加多个元素

    # 删
    nums.remove(9) #删除元素,如果是不存在的元素会报错
    nums.discard(0) #删除元素,如果是不存在的元素不会报错

    # 改/查
    查:无法通过下标索引
    改:不可变类型无法修改元素

    # 转变成list或tuple
    转变成list:list(nums)
    转变成tuple:tuple(nums)

    # 校验密码
    1.密码必须包含大写字母、小写字母、数字、特殊字符
    import string
    all_nums=set(string.digits)
    lower=set(string.ascii_lowercase)
    upper=set(string.ascii_uppercase)
    punctuation=set(string.punctuation)
    for i in range(5):
        pwd=input('pwd:').strip()
        pwd=set(pwd)
        if pwd & all_nums and pwd & lower and pwd & upper and pwd & punctuation:
            print('密码合法')
       else:
            print('密码不合法')

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

    # 定义函数
    def say(name,sex='男'): #say是函数名;say括号里接收的name,sex是形参
    print('%s哈哈哈 性别%s'%(name,sex) #函数体

    # 函数的4种形参类型
    # 1.位置参数-就是按照参数的位置来进行传参
    def calc(x,y): #定义一个函数,参数有x和y,x和y就是形参,也是位置参数
    print(x*y)
    calc(5,2) #调用上面定义的函数,5和2就是实参
    简单点说,形参就是函数接收的参数,而实参就是你实际传入的参数
    # 2.默认参数
    默认参数就是在定义形参的时候,给函数默认赋一个值,这样就算你在调用的时候没传入这个参数,它也是有值的;
    默认参数不是必填的。如果使用默认值参数的话,必须放在位置参数后面定义;
    def say(name,sex='男'): #sex就是一个默认值参数
    print(name,sex)
    say('luxi') #调用,没指定默认值
    say('luxi',sex='女') #调用,指定默认值参数的值
    # 3.可变参数
    可变参数用*来接收,后面想传多少个参数就传多少个;
    可变参数必须在位置参数和默认值参数后面。可变参数也是非必传的;
    def more_arg(name,age,*agrs): #*agrs是可变参数,调用的时候可变参数会把后面多传的参数都放到args这个元组中
    print(name,age,agrs)
    more_arg('Marry', 18, 'nv', 'python', 'China') # 调用
    # 4.关键字参数
    关键字参数使用**来接收,后面的参数也是不固定的,想写多少个写多少个;
    当然也可以和上面的几种一起来使用,如果要一起使用的话,关键字参数必须在最后面;
    使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的;
    def kw_arg(name,**kwargs): #name位置参数、**kwargs关键字参数,调用的时候会把传入的关键字参数放到kwargs这个字典中
    print(name, kwargs)
    kw_arg('sriba', sex='男', age=18) #调用,sex和age就是关键字调用

    # 变量
    在函数里面的变量全都是局部变量,它只能在函数里面使用,函数执行结束那么没有这个变量

    函数的返回值
    每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None;
    如果需要用到函数的处理结果的话,那么就写return,不需要的话,那就不用写;
    函数里面如果碰到return,函数立即结束;
    def calc(a,b):
    res=a*b
    return res #这个就是定义了一个有返回值的函数
    res=calc(6,6) #把函数的返回结果赋值给res
    print(res)

    def my():
    for i in range(100):
        print(i)
        if i==2:
            return #碰到return,函数立即结束
    my()

    # 写一个校验输入的字符串是否为小数的程序
    # 1、只有一个小数点 判断小数点个数
    # 2、 正小数的情况下,小数点左边和右边都是整数的话,才合法 [0 ,12]
    # 3、负小数的情况下 小数点右边整数,左边 必须以负号开头,只有一个负号。
    def check_float(s):
        s=str(s)
        if s.count('.')==1:
            s_list=s.split('.')
            left=s_list[0] #小数点左边
            right=s_list[1] #小数点右边
            if left.isdigit() and right.isdigit(): #这里是判断正小数的
                return True
            elif left.startswith('-') and left[1:].isdigit() and right.isdigit():
                return True
        return False
    print(check_float(0.25))

    def my_file(name,content=None):
        with open(name,'a+') as f:
            f.seek(0)
           if content:
               f.write(content)
          else:
              return f.read()
  • 相关阅读:
    jQuery 教程
    单例设计模式getInstance()
    JS和JQuery总结
    Anchor 对象
    static关键字
    HTML、html
    HTML DOM
    HTML DOM 实例Document 对象
    水池进水与放水问题:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.........(多线程应用)
    迷你DVD管理器(Java版)
  • 原文地址:https://www.cnblogs.com/you-shu/p/9174769.html
Copyright © 2020-2023  润新知