python生成json列表_Python基础(3)——文件操作、三元表达式&列表生成式、集合、json操作、函数...

目录:

一、文件操作

二、三元表达式&列表生成式

三、集合

四、json操作

五、函数

正文:

一、文件操作-自动关闭文件/大文件读取

1、自动关闭文件

with open(xxx) as x:

#f=open('a.txt')#f.close()

#代替以上代码

#文件用完自动关闭

with open('user.txt',encoding='utf-8') as f:

result= f.read()

2、大文件的读取

txt内容:

*******************************

ds,456789

xx,123456

aa,123456

*******************************

代码:

#大文件读

with open('user.txt',encoding='utf-8') as f:for line inf:

line=line.strip()ifline:print(line)

练习

1)读取文件所有内容

# 替换new_str小写转为大写

# 清空原来的文件

# 写进去新的

importos

with open('words.txt') as fr,open('words_new.txt','w') as fw:for line infr:

line=line.strip()if line: #判断空行

line=line.upper()

fw.write(line+'\n')

os.remove('words.txt')

os.rename('words_new.txt','words.txt')

练习2)监控日志,找到每分钟请求大于200的,加入黑名单

日志文件格式:

importtime

point=0whileTrue:

ips={} #ip:count

f=open('access.log',encoding='utf-8')

f.seek(point)for line inf:

line=line.strip()ifline:

ip=line.split()[0]if ip inips:

ips[ip]+=1

else:

ips[ip]=1point=f.tell() #记录指针位置

f.close()for ip inips:

count=ips[ip]if count>=200:print('要加入黑名单的ip地址是:%s'%ip)

time.sleep(60)

二、三元表达式、列表生成式

1、三元表达式

原if..else判断代码

age = 18

if age<18:

v='未成年'

else:

v='成年人'

print(v)

使用三元表达式:

v='未成年' if age<18 else '成年人'

print(v)

2、列表生成式

将a列表加入b列表:

a=[1,2,3,4,5,6]

b=[]for i ina:

b.append(str(i))

使用列表生成式:

#列表生成式

c=[str(i) for i in a]

使用列表生成式且只取奇数:

#对2取余

d=[str(i) for i in a if i%2!=0]print(c)print(d)

三、集合

set  天生去重,无序的(没有下标)

1、list、集合、字典

l=[1,2,11,1,1,3,5,7]

l2={1,2,3,4,5,1,1} #集合

l3={} #字典

l3=set()#集合

s=set(l) #list转集合print(s)print(l2)

2、集合的增删改查

1)新增

l3=set()

l3.add(1) #新增元素

print(l3)

2)删除元素

l3.remove(1) #删除元素

print(l3)

3)把1个集合加入到另一个集合里面

l3.update(l2) #把1个集合加入到另一个集合里面

print(l3)

l3.copy(l2) #浅拷贝

3、交集 并集 差集

1)取交集

stu1 = ['fd','wxl','zjr','lhy']

stu2= ['fd','wxl','dsx','cc']

stu1_set=set(stu1)

stu2_set=set(stu2)#取交集

print(stu1_set.intersection(stu2_set))

print(stu1_set &stu2_set)

练习:输入密码需包含大写、小写字母、数字否则提示错误

importstring

password='abc123'password_set=set(password)if password_set & set(string.digits) and password_set & set(string.ascii_lowercase) and password_set &set(string.ascii_uppercase):print("密码合法")else:print("密码需要包含大写、小写字母、数字")

2)取并集

#取并集 把两个集合合并到一起

s1 = {1,2,3,4}

s2= {4,5,6,7}print(s1.union(s2))

print(s1 | s2)

3)取差集

#取差集 在一个集合里面存在,在另一个集合不存在的

s1 = {1,2,3,4}

s2= {4,5,6,7}print(s1.difference(s2))

print(s1-s2)

4)对称差集

#对称差集 去除两个集合交集

s1 = {1,2,3,4}

s2= {4,5,6,7}print(s1 ^ s2)

print(s1.symmetric_difference(s2))

4、集合可循环

for s ins1:print(s)

六、JSON操作

#json就是一个字符串,只不过所有语言都能解析这个字符串

#json.dumps()

#(list\tuple\dict)python的数据类型转json的

#ensure_ascii=False显示中文 indent=4缩进,格式化

1、python的数据类型-->json

importjson

d={'name':'xiaohei','cars':[1,2,3],'house':(4,5,6),'addr':'北京'}

result= json.dumps(d,ensure_ascii=False,indent=4)print(d)print(result)print(type(result))

2、json--->python数据类型

json_str = '{"name": "xiaohei", "cars": [1, 2, 3], "house": [4, 5, 6]}'dict2=json.loads(json_str)print(dict2)

3、处理文件

# # json.load()#帮你封装  处理文件的功能

# f=''

# # content = f.read()

# # d=json.loads(content)

# d=json.load(f)

# # json.dump()#帮你封装  处理文件的功能

# json_str = json.dumps(d,indent=4,ensure_ascii=False)

# f.write(json_str)

# json.dumps(d,f,indent=4,ensure_ascii=False)

d={'name':'xiaohei','cars':[1,2,3],'house':(4,5,6),'addr':'北京'}

with open('info.txt','w',encoding='utf-8') as fw: json.dump(d,fw,indent=4,ensure_ascii=False) with open('info.txt',encoding='utf-8') as fw: d=json.load(fw)print(d)print(d.get('name'))print(d.get('money'))

七、函数

1、函数及方法

importstringdef hello():#定义函数,提高代码的复用性

print('nihao')

hello()

练习1:写一个函数校验密码是否合法

def check_password(password):#校验密码是否合格,必传参数,位置参数

password_set =set(password)if password_set & set(string.digits) and password_set & set(string.ascii_lowercase) and password_set &set(string.ascii_uppercase):print("密码合法")returnTrueelse:print("密码需要包含大写、小写字母、数字")returnFalse

password_result=check_password('dffsdfs1232A')print(password_result)

备注:练习1中  定义函数时def check_password(password):传入的password为形式参数(形参);调用方法时password_result=check_password('dffsdfs1232A')传入的dffsdfs1232A为实际参数(实参)

练习2 将读/写文件写成函数

写文件

defwrite_file(file_name,content):

with open(file_name,'w',encoding='utf-8') as fw:

fw.write(content)#三种传参方式

write_file('1.txt','123456')

write_file(content='1234567',file_name='1.txt')

write_file('1.txt',content='12345678')

读文件

defread_file(file_name):

with open(file_name,'r', encoding='utf-8') as fr:

content=fr.read()returncontent

a=read_file('1.txt')print(a)

练习3:判断输入数字是否为小数

defis_float(s):

s=str(s)if s.count('.')==1:

left,right=s.split('.')if left.isdigit() andright.isdigit():returnTrueif left.startswith('-') and left.lstrip('-').isdigit() andright.isdigit():returnTruereturn False #不能用else 否则-A1.3这种情况返回空print(is_float('-1.3'))

print(is_float('-A1.3'))

print(is_float('-.3'))#函数里面遇到return,函数立即结束

2、默认值参数

def op_file(file_name,content=None):print(content)ifcontent:

write_file(file_name,content)else:

result=read_file(file_name)returnresultprint(op_file('1.txt'))

op_file('1.txt','sdsfsdgrfssssssss')

3、函数返回值

#如果一个函数没有写返回值,那么返回的就是None

#如果函数有多个返回值,那么返回的是一个元祖

deftest():print('hello')deftest2():return 1,2,3

print(test())print(test2())

a,b,c=test2() #拆包形式

4、全局变量、局部变量

#全局变量:一般定义在代码的最上边,大家都可以用

#局部变量:在函数里面定义的变量都是局部变量

#list、dict、set 不需要global声明

#str、int、float、tuple、bool需要声明

country = 'China'file_name= '123'

defsay():print(country)

word= 'Nihao'

defzc():

country='Japan'

print(country)defupdate_file_name():globalfile_name

file_name= 'a.json'say()

zc()

update_file_name()print(country)print(file_name)

练习1:

#money返回多少

money = 500

deftest(consume):return money-consumedeftest1(money):return test(money)+money

money=test1(money)print(money)

答案:500

练习2:以下代码打印出的结果是?

deftest():globala

a= 5

deftest1():

c= a+5

returnc

res=test1()print(res)

答案:报错

#需改为

#test()

# res = test1()

# print(res)

5、函数参数:

#必传参数(位置参数)、默认值参数

#可选参数(参数组)、关键字参数

1)可选参数

def send(*args): #可选参数 它不是必传的,不限制参数个数,他是把参数放到了一个list里面

for p inargs:print('发短信给xxx%s'%p)

send()

send(110)

send(110,120,119)

2)关键字参数

#关键字参数,它不是必传的,不限制参数个数#它是把参数放到一个字典里面,但是它传参的时候必须用关键字的方式

def send_sms(**kwargs):print(kwargs)

send_sms()

send_sms(xzh='晚上好')

send_sms(lhh='新年好',fd='生日快乐',lyh='新婚幸福')

3)函数参数传入顺序

def nb_func(name1,age,country='China',sex='女',*args,**kwargs):#1必填参数 name1,age

#2默认值参数 country

#3参数组 *args

#4关键字参数 **kwargs

print(name1)print(age)print(country)print(args)print(kwargs)

nb_func('xh',18,'Japan','nan','abc','efg','hhh',name=1,b=2,c=3)print()

nb_func('xh',18,'Japan','nan','abc','efg','hhh','aaa0','bbb','cccc')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值