查询OSS目录内部文件大小–》写入EXCEL
# -*- coding: utf-8 -*-
import oss2
import xlsxwriter
def CalculateFolderLength(bucket, folder):
length = 0
for obj in oss2.ObjectIteratorV2(bucket, prefix=folder):
length += obj.size #此时单位为Byte
return length #返回文件大小
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
if __name__ == '__main__':
workbook = xlsxwriter.Workbook('oss数据集.xlsx') # 创建一个excel文件
worksheet = workbook.add_worksheet(u'数据集') # 在文件中创建一个名为TEST的sheet,不加名字默认为sheet1
worksheet.set_column('A:A', 20) # 设置第一列宽度为20像素
worksheet.set_column('B:B', 20) # 设置第一列宽度为20像素
worksheet.write(0, 0, "数据集名称")
worksheet.write(0, 1, "数据集大小")
a = 1
b = 1
for obj in oss2.ObjectIteratorV2(bucket, delimiter='/'):
if obj.is_prefix(): # 判断obj为文件夹。
length = CalculateFolderLength(bucket, obj.key)
obj.key=obj.key.split("/",2)[0]
if length/1024<1:#B
length=str(round(length,2)) + "B." #原来是Byte,进行了进制转换
elif length/1024>=1 and length/1024/1024<1:#KB
length=str(round(length/1024,2)) + "KB." #原来是Byte,进行了进制转换
elif length/1024/1024>=1 and length/1024/1024/1024<1:#MB
length=str(round(length/1024/1024,2)) + "MB." #原来是Byte,进行了进制转换
elif length/1024/1024/1024>=1:#GB
length=str(round(length/1024/1024/1024,2)) + "GB." #原来是Byte,进行了进制转换
# for i in range(len(list(oss2.ObjectIteratorV2(bucket,delimiter='/')))):
worksheet.write(a, 0, obj.key) # 第1列设置值
worksheet.write(b, 1, length) # 第2列设置值
print('directory: ' + obj.key + ' length:'+length) #原来是Byte,进行了进制转换
a=a+1
b=b+1
# if length/1024<1:#B
# print('directory: ' + obj.key + ' length:'+length) #原来是Byte,进行了进制转换
# if length/1024>=1 and length/1024/1024<1:#KB
# print('directory: ' + obj.key + ' length:' + length) #原来是Byte,进行了进制转换
# if length/1024/1024>=1 and length/1024/1024/1024<1:#MB
# print('directory: ' + obj.key + ' length:' + length) #原来是Byte,进行了进制转换
# if length/1024/1024/1024>=1:#GB
# print('directory: ' + obj.key + ' length:' + length) #原来是Byte,进行了进制转换
else: # 判断obj为文件。
if obj.size/1024<1:#B
print('file:' + obj.key + ' length:' + str(round(obj.size,2)) + "B.")
if obj.size/1024>=1 and obj.size/1024/1024<1:
print('file:' + obj.key + ' length:' + str(round(obj.size/1024, 2)) + "KB.")
if obj.size/1024/1024>=1 and obj.size/1024/1024/1024<1:
print('file:' + obj.key + ' length:' + str(round(obj.size/1024/1024, 2)) + "MB.")
if obj.size / 1024 / 1024 /1024>= 1:
print('file:' + obj.key + ' length:' + str(round(obj.size / 1024 / 1024/1024, 2)) + "GB.")
workbook.close()