Python(24)统计各种类型的文件的数量

下面的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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值