zoukankan      html  css  js  c++  java
  • day04 字符串、文件操作操作方法及函数入门

    1.字符串操作补充

       1) join()方法

    new_str=str1.join(list)   #将str1这个新的字符串添加到list的每个元素后面并拼接成字符串输出

    # user=["json","jame","kobe"]
    # res=",".join(user) #1.把list转换成字符串,并把逗号添加到每个元素的后面连接起来
    # print(res)

    2)zfill() 方法,自动补0
    #在0~110列表中的数添加0,比如1变成001,10变成010,百位不用添加
    方法一:
    # l1=[]
    # for i in range(1,111):
    # i=str(i)
    # if len(i)==1:
    # i="00"+str(i)
    # l1.append(i)
    # elif len(i)==2:
    # i="0"+str(i)
    # l1.append(i)
    # else:
    # l1.append(i)
    # print(l1)

    方法二:使用zfill()方法
    new_l=[]
    for i in range(111):
    i=str(i)
    new_l.append(i.zfill(3))
    print(new_l)

    3)find()和index()都是找下标的
    str="abcd"
    print(str.find("f")) #find()查找不存在的元素时,返回结果是-1,不会报错
    print(str.index("f")) #index()查找不存在结果时会报错

    4)isdigit()判断字符串是否为正整数 ,islower()判断是否都是小写字母,isalnum()判断字符中是否有字母或数字,isalpha()判断字符串是否都是字母,isspace判断是否空格,结果都是返回true或者false
    5)字符串模块
    #使用程序生成由大小写+数字+非正常字符组成的密码
    import string

    print(string.ascii_uppercase)
    print(type(string.ascii_uppercase)) # 大写字母组成的字符串

    print(string.ascii_lowercase) #小写字母组成的字符串

    print(string.ascii_letters) #大小写组成的字符串

    print(string.punctuation) #所有的非法字符
    总结:字符串常用方法
    s='anc'
    s.upper()
    s.lower()
    s.capitalize()
    s.split(',')
    s.strip('abc')
    s.lstrip()
    s.rstrip()
    s.replace('old','new')
    s.endswith('xxx.mp3')
    s.startswith('186')
    ','.join('sdfsdfds')
    s.isdigits()
    s.isalnum()
    s.zfill(5)
    2.文件操作
    1) r只读模式,如果读的文件不存在时会报错,读取文件的几种方法

    with open("user.txt","r" ,encoding="utf-8") as f:
    print(f.read()) #第一次读。read()获取文件中所有内容
    # # print(f.read()) #第二次读已经读不到东西,因为文件指针在最后,读不到东西
    # print(f.readlines()) #把文件中每行的内容读取以空格分割并放在一个列表中
    # print(f.readline()) #读一行的内容
    2)w 只写模式,会清空文件,文件不存在时,会生成一个文件,写中文时encoding="utf-8"
    写入文件的两种方法 write()只能是字符串, writelines()方法是先循环再写入文件,可以是字符串,也可以是List
    with open("user.txt","a" ,encoding="utf-8") as  f:
    # u="asdasd"
    # f.write(u)
    # f.writelines(u) #可以把列表中的数循环写入文件
    #将List 文件的内容写入文件
    user=["abc,1234 ","def,456"]
    #方法一,使用write(),必须先循环列表
    # for i in user:
    # f.write(i)
    #方法二,直接使用writelines()方法
    f.writelines(user)
    3)a追加

    4)r+,w+,a+, r+文件不存在时会报错,写的时候也没有报错,也可以写入。w+可以读,但是会清空文件

    with open("user.txt","r+") as f:
      f.write("12132") #可以写入,写入第一行

    with open("user.txt","w+") as f:
      f.read() #可以写入,写入第一行
    5)a+ 追加写模式
    with open("user.txt","a+") as f:
    f.seek(0)
    f.read() #使用a+读取文件时,必须把指针放在文件头,不然读到的都是空

    6)打开二进制文件时,二进制读rb,二进制写rb
    7)高效处理文件,如果处理大文件时,高效处理文件的方法
    with open("user.txt","r",encoding="utf-8") as f:
    #第一种方式
    # while True:
    # line=f.readline() #一次只取一行,读取文件时效率比较高
    # if line!="":
    # print(line)
    # else:
    # print("文件内容读完了")
    # break
    # #f第二种方式
    for line in f: #直接循环文件对象
    print(line)
    练习:每隔一分钟读取文件获取访问服务的IP,当ip访问的次数超过200次时,改Ip可能存在恶意攻击,将这个ip拉黑
    import time

    point=0 #初始化文件指针的位置,第一次从头开始读起
    while True:
    l={}
    with open("access.log","r",encoding="utf-8") as f:
    f.seek(point) #下一分钟文件从标记的指针开始读起
    for line in f: #使用高效读取文件的方法也可以使用f.readlines()方法
    # print(line)
    ip=line.split(" ")[0]
    # l[ip]=1
    if ip in l.keys():
    l[ip]+=1
    else:
    l[ip]=1
    point=f.tell() #记录文件指针的位置
    print(l)
    for ip,count in l.items():
    if count>=200:
    print("%s拉黑"%ip)
    time.sleep(60)

    8)修改文件内容
    #将文件中的“你”改成“Ni”

    #1.第一种方法简单粗暴。先读到文件内容。替换再重新写入,打开了两次文件
    # f=open("file1.txt",encoding="utf-8")
    # reg=f.read().replace("我","Ni")
    # f.close()
    # f=open("file1.txt","w",encoding="utf-8") #清空文件内容
    # f.write(reg) #将替换的后的内容写入文件
    # f.close()
    #2.使用f.truncate()清空原文件中的内容

    # f=open("file1.txt","a+",encoding="utf-8")
    # f.seek(0)
    # reg=f.read().replace("你","Ni")
    # f.seek(0) #文件已经读到最后,再指定到文件头
    # f.truncate() #清空文件的内容
    # f.write(reg)
    # # f.flush()
    # f.close()
    #3.修改较大文件的内容
    import os

    with open("file1.txt","r",encoding="utf-8") as f1, open("file2.txt","w",encoding="utf-8") as f2:
    for line in f1:
    new_line=line.replace("我","你")
    f2.write(new_line)
    os.remove("file1.txt") #删除原文件
    os.rename("file2.txt","file1.txt") #将新文件名字改为原文件的名字



    3.处理json数据
     1)json串转换成字典,使用json.loads()方法转换成字典
    读取文件内容,转换成字典
    import json
    # stu1="""
    # { "name":"kobe",
    # "age":40,
    # "sex":"man"
    # }
    # """
    # res=json.loads(stu1) #将json串装换成字典
    #
    # print(type(res))
    # print(res)

    2)将字典转换json串写入文件
    #将字典写入文件时,需要将字典装换成json串
    #
    # stu2={"name":"jams","age":"30","sex":"man"}
    #
    # js=json.dumps(stu2,indent=4,ensure_ascii=False) #加indent参数控制json串的缩进,ensure_ascii=False控制json中文显示
    # print(type(js))
    #
    # with open("testjosn.txt","w",encoding="utf-8") as f:
    # f.write(js)

    3)load()和loads()方法的区别
    import  json

    with open("testjosn.txt",encoding="utf-8") as f:
    # content=f.read()
    # stu_dic=json.loads(content) #loads()方法需要先读取文件,获取文件内容存入变量,再传入方法中转换成字典
    # print(stu_dic)
    print(json.load(f)) #load()方法直接读文件变转换成字典
    4)dumps()和dump()的区别
    stu2={"name":"jams","age":"30","sex":"man"}

    f=open("stu2.txt","w",encoding="utf-8")

    json.dump(stu2,f,indent=4,ensure_ascii=False) #如果想直接把json串写入文件中,直接用dump()

    4.函数







    
    


    
    
    
  • 相关阅读:
    ThinkPHP 5 中AJAX跨域请求头设置方法【转】
    phpstorm激活大全【转】
    PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function【转】
    php的dirname(__FILE__)和dirname(dirname(__FILE__))使用总结【转】
    php 设置临时内存和超时设置脚本最大执行时间
    mysql 实现表连接(左,右,内,全连接)【转】
    Maximum execution time of 30 seconds exceeded解决办法【转】
    常用邮箱SMTP服务器地址大全
    叉积(POJ
    乘法逆元(P3811)(四种方法)
  • 原文地址:https://www.cnblogs.com/zzzao/p/9572869.html
Copyright © 2011-2022 走看看