python3中字符串的切片练习

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 = {}

#字符串的每一行是一张图片的信息,这时候就要考虑怎么样把整个字符变成一行一行的,分别来处理,根据换行符\n切割
#根据\n来切割,保存在log_list的这个列表中
log_list = log.split("\n")
for one in log_list:  
    if one == "":
        continue  #如果发现空元素,则结束本次循环,进行下一次循环
    else:
        #根据制表符\t切割
        image_list = one.split("\t")

#切割完成后图片大小是列表中下标为1的元素,下标为0的元素是文件名,我们需要的是图片格式,所以要再次切割拿出图片格式

        #图片大小
        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*)')#compile 函数的参数,就是正则表达式字符串。

image_list = a.findall(log)#compile对象的 findall 方法返回所有匹配的子串,放在一个列表中。
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()#对字符串进行切片(splitlines()方法默认按照换行和空格进行切片)
    for i in name_list1:#对切片后的结果进行遍历,切片后的结果默认保存在列表中
        #对列表遍历时,将每个元素进行处理,将元素前后的空格去除掉。使用i.strip()方法。
        if i.strip() == '':
            continue #不满足条件时,此次遍历结束
        else:
           name1.append(i.strip())
    return name1 #调用函数时,将会返回列表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)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

patmos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值