下面的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
‘’’
请编写一个程序,统计出不同类型的 文件的大小总和
比如:
jpeg 9988999
json 324324
png 2423233
解题思路
1.提取文件类型
① 以行为单位,每次取一行
② 以\t作为分隔符,取得第0位
③ 以"."作为分隔符,取得文件类型
2.提取文件大小
3.对相同类型的文件进行累加
实战
第一种方法:
采用字典方式,存储格式如下{jpg’,4566,’ json’,4566}
dict1 = {}
line_list= log.split('\n')
for one in line_list:
if one != '':
parts = line.split("\t")
file_type = parts[0].split(".")[-1] #取得文件类型
file_size = int(parts[1]) #取得对应的文件大小
print(file_type, file_size)
if file_type not in dict1: #如果dict1中没有出现过某个文件类型
dict1[fule_type] = file_size #新增文件类型和文件大小的键值对
else:
dict1[file_type] += file_size #将文件大小进行累加
第二种方法
采用列表方式,需要二层列表存储格式如下 [[‘jpg’,4566],[‘json’,4566]]
# 记录各种类型的文件的数量统计,存储格式如下 [['jpg',4566],['json',4566]]
fileLenTable= []
# 根据文件类型找到记录对象,进行累加
def putRecordToTable(fileType,fileSize):
for one in fileLenTable:
if one[0] == fileType: # 如果子列表中已经有这个文件类型,则将文件大小进行累加
one[1] += fileSize
break
else: # 如果遍历整个列表都没有出现某个文件类型,则新增[文件类型, 文件大小]的子列表
fileLenTable.append([fileType,fileSize])
for one in log.split('\n'):
if one.strip() == '':
continue
parts = one.split('\t')
file_name= parts[0].split(".")[-1] #取得文件类型
file_size = int(parts[1]) #取得对应的文件大小
putRecordToTable(file_name,file_size )
print(fileLenTable)