OSS中所有文件及其大小、第二层文件夹的大小写入Excel(还有点瑕疵)
import oss2
import xlsxwriter
def CalculateFolderLength(bucket, folder):
length = 0
for obj in oss2.ObjectIterator(bucket, prefix=folder, max_keys=1000):
length += obj.size
return length
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# ObjectIterator 会列举所有的文件或目录,但每次循环列举100个,可以通过 max_keys 来调整数目,最大值为 1000
a = 1
b = 1
workbook = xlsxwriter.Workbook('Human3.6统计.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, "数据集大小")
file_list=["file:Kvasir","111"]#第一个输出的/左边部分,之后会替换
file_size=0
for obj in oss2.ObjectIterator(bucket, delimiter=''):
if obj.is_prefix(): # 文件夹
# obj.key=obj.key+'/source'
length = CalculateFolderLength(bucket, obj.key)
print('directory: ' + obj.key + ' length:' + str(length / 1024) + "KB")
else: # 文件
count1=str(obj.key).count('/')
dataset_name=str(obj.key).split('/',count1)[0]
dir_name=str(obj.key).split('/',count1)[1]
if dataset_name!=file_list[0]:
print("文件夹{}大小".format(file_list[1]),file_list[1],":",file_size/1024)
worksheet.write(a, 0, str(file_list[0]+'/'+file_list[1])) # 第1列设置值
worksheet.write(b, 1, file_size / 1024) # 第2列设置值
a = a + 1
b = b + 1
file_list[0]=dataset_name
print("-----------------新的数据集开始了--------------")
print('file:' + obj.key + ' length:' + str(obj.size / 1024) + "KB")
file_size=obj.size
else:
if file_list[1]!=dir_name:
print("文件夹{}大小".format(file_list[1]),file_list[1],":",file_size/1024)
worksheet.write(a, 0, str(file_list[0]+'/'+file_list[1])) # 第1列设置值
worksheet.write(b, 1, file_size/1024) # 第2列设置值
a = a + 1
b = b + 1
file_list[1]=dir_name
print("##############新的一个目录#################")
print('file:' + obj.key + ' length:' + str(obj.size / 1024) + "KB")
file_size=obj.size
else:
file_size=file_size+obj.size
print('file:' + obj.key + ' length:' + str(obj.size / 1024) + "KB")
worksheet.write(a, 0, str(obj.key) ) # 第1列设置值
worksheet.write(b, 1, obj.size / 1024) # 第2列设置值
a = a + 1
b = b + 1
print("文件夹{}大小".format(file_list[1]),file_list[1],":",file_size/1024)
worksheet.write(a, 0, str(file_list[0]+'/'+file_list[1])) # 第1列设置值
worksheet.write(b, 1, file_size/1024) # 第2列设置值
workbook.close()