python3中字符串的处理练习
eg1:
下面的log变量记录了云服务器上 当天上传的文件信息其中第一列是文件名,第二列是文件大小
请编写一个程序,统计出不同类型的 文件的大小总和
比如:
jpeg 9988999
json 324324
png 2423233
----------------------------------
log = '''
f20180111014341/i_51a7hC3W.jpeg 169472 FrITJxleSP7wUD-MWw-phL_KP6Eu 15156063244230469 image/jpeg 0
f20180111014341/j_R0Hpl4EG.json 1036 ForGzwzV3e-uR3_UzvppJs1VgfQG 15156064773253144 application/json 0
f20180111020739/i_0TDKs0rD.jpeg 169472 FrITJxleSP7wUD-MWw-phL_KP6Eu 15156076847077556 image/jpeg 0
f20180111020739/j_JFO6xiir.json 1040 FmUhTchdLOd7LBoE8OXzPLDKcW60 15156077904192983 application/json 0
f20180111090619/i_1BwNksbL.jpg 49634 FtXBGmipcDha-67WQgGQR5shEBu2 15156329458714950 image/jpeg 0
f20180111090619/i_3BKlsRaZ.jpg 30152 FoWfMSuqz4TEQl5FT-FY5wqu5NGf 15156330575626044 image/jpeg 0
f20180111090619/i_5XboXSKh.jpg 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156329453409855 image/jpeg 0
f20180111090619/i_6DiYSBKp.jpg 74017 FrYG3icChRmFGnWQK6rYxa88KuQI 15156329461803290 image/jpeg 0
f20180111090619/i_76zaF2IM.jpg 38437 Fui8g5OrJh0GQqZzT9wtepfq99lJ 15156334738356648 image/jpeg 0
f20180111090619/i_B6TFYjks.jpg 37953 FleWqlK2W1ZmEgAatAEcm1gpR0kC 15156329464034474 image/jpeg 0
f20180111090619/i_N9eITqj3.jpg 38437 Fui8g5OrJh0GQqZzT9wtepfq99lJ
'''
注意:
将字符串切片,切片后的结果保存在列表当中!
解题方法一:
使用字符串分割的方式,分布将图片格式和图片大小分离出来。
log_dict = {}
log_list = log.split("\n")
for one in log_list:
if one == "":
continue
else:
image_list = one.split("\t")
images_size = int(image_list[1])
images_type = image_list[0].split('.')[1]
if images_type in log_dict:
log_dict[images_type] += images_size
else:
log_dict[images_type] = images_size
print(log_dict)
解题方法二:
使用正则表达式将字符串中的关键字进行匹配提取。
images = {}
import re
a = re.compile(r'\.(.\D+)\s(\d*)')
image_list = a.findall(log)
for one in image_list:
image_type = one[0]
image_size = int(one[1])
if image_type in images:
images[image_type] += image_size
else:
images[image_type] = image_size
print(images)
eg2:
请写一个程序
找出str1中所有str2中不存在的人名,并且找出str2中所有str1中不存在的人名
str1 = '''
熊宁
杰益
王伟伟
青芳
玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''
str2 = '''
焦候涛
熊宁
玉琴
骆龙
韩旭
杨高旺
杰益
莫福
伟伟
李福
'''
注意:使用函数做
def name_list(name):
name1=[]
name_list1 = name.splitlines()
for i in name_list1:
if i.strip() == '':
continue
else:
name1.append(i.strip())
return name1
s1= set(name_list(str1))
s2= set(name_list(str2))
a = s1-s2
b = s2 -s1
print(a)
print(b)
eg3:
有如下的字符串,记录了三国人物的名字和年龄
ageTable = '''
诸葛亮, 28
刘备, 48
刘琦, 25
赵云, 32
张飞, 43
关羽, 45
'''
请写一个程序将其中 30岁以上和以下的人分别打印出来,类似这样
大于等于30岁的人有:
刘备
赵云
张飞
关羽
小于30岁的人有:
诸葛亮
刘琦
name_list = ageTable.splitlines()
newname_list =[]
a1=[]
a2=[]
for name in name_list:
if name.strip()=='':
continue
else:
name1=name.strip().split(',')
newname_list.append(name1)
if int(name1[1])>=30:
a1.append(name1[0])
else:
a2.append(name1[0])
print(f'大于等于30岁的人有:')
for name in a1:
print(name)
print(f'小于等于30岁的人有:')
for name in a2:
print(name)