【练习4】统计各文件类型的总文件大小

1.下面的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.gif 30152 FoWfMSuqz4TEQl5FT-FY5wqu5NGf 15156330575626044 image/jpeg 0
f20180111090619/i_5XboXSKh.gif 40238 Fl84WaBWThHovIBsQaNFoIaPZcWh 15156329453409855 image/jpeg 0
f20180111090619/i_6DiYSBKp.jpg 74017 FrYG3icChRmFGnWQK6rYxa88KuQI 15156329461803290 image/jpeg 0
‘’’

题目分析

  • 首先观察目标输出,包含文件类型及文件总大小
  • 再观察log的值为字符串的形式,且每个文件信息都独占一行,需要获取的信息为第一列的文件后缀,以及第二列的值。则可以通过切割的方式获取
  • 获取到文件类型和文件大小后,可循环遍历这个列表
  • 可以定义一个加文件大小的函数,然后在上一步的循环遍历中调用这个函数,就可以实现叠加文件大小,按照类型进行统计的话,可以在函数中添加条件判断

第一步:切割字符串,提取文件类型、文件大小

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.gif	30152	FoWfMSuqz4TEQl5FT-FY5wqu5NGf	15156330575626044	image/jpeg	0	
f20180111090619/i_5XboXSKh.gif	40238	Fl84WaBWThHovIBsQaNFoIaPZcWh	15156329453409855	image/jpeg	0	
f20180111090619/i_6DiYSBKp.jpg	74017	FrYG3icChRmFGnWQK6rYxa88KuQI	15156329461803290	image/jpeg	0	
'''
fileList= log.split('\n')
for i in range(1,len(fileList)-1):
    if fileList[i]!='': #排除空行
        fileType = (fileList[i].split('\t')[0]).split('.')[-1]
        fileSize = fileList[i].split('\t')[1]
        print(fileType,fileSize)

执行结果:
【练习4】统计各文件类型的总文件大小_第1张图片
代码解析:

  1. 将str类型按照回车符号切割成列表(可以打印这个列表看一下)
  2. 然后遍历这个列表,遍历列表时提取有用的文件类型及文件大小

第二步:按照文件类型,统计文件大小

fileTable = []
def getFileSize(fileType,fileSize):
    for one in fileTable:
        if one[0]==fileType:
            one[1] += fileSize
            return
    fileTable.append([fileType,fileSize])
    return

代码解析:

  1. 先定义一个列表fileTable用来存放各文件类型及大小;
  2. 再定义一个函数需要传第一步得到的文件类型及大小;
  3. 然后对这个列表进行遍历,条件是如果列表中存在这个文件类型,那么就对size累加,如果不存在这个文件类型,那么就将文件类型及大小作为一个元素追加到fileTable(其实存到列表后是这样的:[ [fileType1,fileSize1],[fileType2,fileSize2] ])

第三步:在第一步的循环中调用函数,最后打印出fileTable就可以了
完整程序:

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	155472	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.gif	30152	FoWfMSuqz4TEQl5FT-FY5wqu5NGf	15156330575626044	image/jpeg	0	
f20180111090619/i_5XboXSKh.gif	40238	Fl84WaBWThHovIBsQaNFoIaPZcWh	15156329453409855	image/jpeg	0	
f20180111090619/i_6DiYSBKp.jpg	74017	FrYG3icChRmFGnWQK6rYxa88KuQI	15156329461803290	image/jpeg	0	
'''
fileTable = []
def getFileSize(fileType,fileSize):
    for one in fileTable:
        if one[0]==fileType:
            one[1] += fileSize
            return
    fileTable.append([fileType,fileSize])
    return

fileList= log.split('\n')
for i in range(1,len(fileList)-1):
    if fileList[i]!='': #排除空行
        fileType = (fileList[i].split('\t')[0]).split('.')[-1]
        fileSize = fileList[i].split('\t')[1]
        getFileSize(fileType,int(fileSize))
print(fileTable)

执行结果:
【练习4】统计各文件类型的总文件大小_第2张图片

你可能感兴趣的:(python习题集,python)