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\n","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.函数











 

posted on 2018-09-02 10:16  zz测试笔记  阅读(158)  评论(0编辑  收藏  举报