Я пишу сценарий, чтобы перечислить 20 самых больших файлов в целевом каталоге. Как только у меня есть файлы, я выполняю некоторую математику по размеру, чтобы применить правильную информацию для считывания с человека, то есть Kb, Mb, Gb.Как вы берете данные из сортировки Python и выполняете некоторую математику на кортеже, не испортив порядок сортировки?
Это, однако, приводит к нарушению порядка. Как я могу это сделать и сохранить порядок сортировки неповрежденным?
#! /usr/bin/env python
import operator, os, sys
args = sys.argv
if len(args) != 2:
print "You must one enter one directory as an argument."
sys.exit(1)
else:
target = args[1]
data = {}
for root, dirs, files in os.walk(target):
for name in files:
filename = os.path.join(root, name)
if os.path.exists(filename):
size = float(os.path.getsize(filename))
data[filename] = size
sorted_data = sorted(data.iteritems(), key=operator.itemgetter(1), reverse=True)
total = str(len(sorted_data))
while len(sorted_data) > 20:
sorted_data.pop()
final_data = {}
for name in sorted_data:
size = str(name[1])
if size >= 1024:
size = round(float(size)/1024, 2)
if size >= 1024:
size = round(size/1024, 2)
if size >= 1024:
size = round(size/1024, 2)
size = str(size) + "Gb"
else:
size = str(size) + "Mb"
else:
size = str(size) + "Kb"
final_data[name] = size
print "The 20 largest files are:\n"
for name in final_data:
print str(final_data[name]) + " " + str(name)
print "\nThere are a total of " + total + " files located in " + target
Вы помещаете отсортированные данные в новый словарь 'final_data', который не предназначен для последовательностей – daniel