我有一个包含许多文件的目录,大约50k。我想选择 n 最小的文件。
import os
def main():
listfile = os.listdir("../../folder")
for singlefile in listfile:
print singlefile
有了这段代码,不幸的是,我会全部选择它们。
答案 0 :(得分:4)
您可以使用os.path.getsize
来获取文件大小,然后使用sort
文件来获取文件大小。 (heapq.nsmallest
通常是优先的,但已经在另一个anser中涵盖,所以我将展示另一种选择):
import os
directory = "../../folder"
n = 10
files = os.listdir(directory)
files_sorted_by_size = sorted(files, key=lambda filename: os.path.getsize(os.path.join(directory, filename)))
nsmallest_files = files_sorted_by_size[:n]
print(nsmallest_files)
在一行中:
sorted(os.listdir(directory), key=lambda filename: os.path.getsize(os.path.join(directory, filename)))[:n]
答案 1 :(得分:1)
def main():
# The folder containing files.
directory = ""../../folder""
# Get all files.
list = os.listdir(directory)
# Loop and add files to list.
pairs = []
for file in list:
# Use join to get full file path.
location = os.path.join(directory, file)
# Get size and add to list of tuples.
size = os.path.getsize(location)
pairs.append((size, file))
# Sort list of tuples by the first element, size.
pairs.sort(key=lambda s: s[0])
# Display pairs.
for pair in pairs:
print(pair[1])
答案 2 :(得分:0)
您可以使用os.stat
来获取文件的大小。与heapq.nsmallest
结合使用,您可以轻松找到最小的文件:
routes = list()
routes.append(app1_routes)
routes.extend(app2_routes)
答案 3 :(得分:0)
除了上述好的解决方案,这是我的25美分。您可以使用os.walk, os.stat & sorted
函数从目录中获取n个最小的文件。它也可以扩展到递归目录。
import os
def get_n_smallest_files(directory, n):
file_map = {}
for root, subdirs, files in os.walk(directory):
for file_path in [root + file for file in files]:
file_map[file_path] = os.stat(file_path).st_size
return sorted(file_map.items(), key=lambda x: x[1])[:n]
if __name__ == "__main__":
directory = "/path/to/directory/"
small_files_limit = 10
print get_n_smallest_files(directory, small_files_limit)