如何使用python检查目录中文件的大小?

时间:2013-11-28 13:15:14

标签: python size compare

我有一个包含4个文本文件的文件夹。我想编写一个代码,用它来检查我文件夹中文件的大小,只打开那些大小相同的代码。任何人都有任何想法?

我已经尝试过这个

import os


d=os.stat('H:/My Documents/211').st_size

2 个答案:

答案 0 :(得分:5)

我无法重现您的错误。此

import os
print os.path.getsize('mydata.csv')
print os.stat('mydata.csv').st_size

产量

359415
359415

我猜你提供的文件名是错误的。这将打印文件夹中所有文件的大小

my_dir = r'path/to/subdir/'

for f in os.listdir(my_dir):
    path = os.path.join(my_dir, f)
    if os.path.isfile(path):
        print os.path.getsize(path)

答案 1 :(得分:3)

要获取目录中的所有文件,可以使用os.listdir

>>> import os
>>> basedir = 'tmp/example'
>>> names = os.listdir(basedir)
>>> names
['a', 'b', 'c']

然后您需要在名称上添加basedir

>>> paths = [os.path.join(basedir, name) for name in names]
>>> paths
['tmp/example/a', 'tmp/example/b', 'tmp/example/c']

然后你可以使用os.stat(路径).st_size(我创建的示例文件为空)将其转换为(名称,大小)对的列表:

>>> sizes = [(path, os.stat(path).st_size) for path in paths]
>>> sizes
[('tmp/example/a', 0), ('tmp/example/b', 0), ('tmp/example/c', 0)]

然后,您可以使用collections.defaultdict

将具有相同大小的路径组合在一起
>>> import collections
>>> grouped = collections.defaultdict(list)
>>> for path, size in sizes:
...     grouped[size].append(path)
... 
>>> grouped
defaultdict(<type 'list'>, {0: ['tmp/example/a', 'tmp/example/b', 'tmp/example/c']})

现在你可以按大小获取所有文件,然后打开它们(不要忘记事后关闭它们!):

>>> open_files = [open(path) for path in grouped[0]]