如何使用 Python 按文件大小搜索文件 [重复]

Posted

技术标签:

【中文标题】如何使用 Python 按文件大小搜索文件 [重复]【英文标题】:How to search file by its size using Python [duplicate] 【发布时间】:2014-07-04 13:27:25 【问题描述】:

我卡住了。我需要使用 Python 编写代码来按文件大小查找文件并将其名称和大小添加到列表中。我有一个程序,它按名称在目录中搜索文件。我需要使用 get opts 制作另一个标志以按大小进行搜索。

import getopt
import sys
import os
from os import listdir, walk
from os.path import isfile, join

def find_by_name(name, path, result): #Define a function to search the file by it's name
    result = []
    for root, dirs, files in os.walk(path):
        if name in files:
            result.append(os.path.join(name)) #Join the file to the list called result
        else:
            print ("Nothing was found by %s" % name)
        return result
def main():
    path_dir = raw_input("Select the directory you want to search: ")
    results = []
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'n:y:d:')
    except getopt.GetoptError as err:
        print (err)
        sys.exit

    for o, a in opts:
        if o in ("-n", "--name"):
           pro = find_by_name(a, path_dir, results)
if __name__ == "__main__":
    main()

【问题讨论】:

我觉得这是一个很好的主题问题,但由于提问者不熟悉英语,因此很难解析。有人可以翻译吗? 他想要文件的大小 您可以使用 [此处][1] [1] 中所述的 os.stat 函数查找文件大小:***.com/questions/2104080/… @AdamSmith 我只是想按文件大小解析文件,就像使用函数 find_by_name 一样。对不起我的英语不好:) @user3642703 无需为你的英语不好而道歉——我可以保证你说我的语言比我说你的好! 【参考方案1】:

os.walk 为您提供路径和文件名。然后你可以使用

stats = os.stat(path+name)
stats.st_size

以字节为单位获取文件大小。因此您可以将当前功能更改为:

def find_by_size(size, path):
    result = []
    for root, dirs, files in os.walk(path):
        if os.stat(path+name).st_size == size:
            result.append((os.path.join(name), stats.st_size))
        else:
            print ("Nothing of size %d was found" % size)
        return result

你也不需要传递结果,因为你只是用一个空列表替换它。 Python 可以从函数返回列表。

【讨论】:

好的,但是我怎样才能像在函数 find_by_name 中那样检查它的大小???【参考方案2】:
def matched_files(base_directory):
    for root, dirs, files in os.walk(path):
        if name in files:
           yield os.path.join(root,name) #Join the file to the list called result

print sorted(matched_files("/some/path"),key=os.path.getsize) #sort files matching name by size

我认为会起作用...而且它大大简化了您的匹配程序...通过将它变成一个生成器

如果您尝试匹配给定大小的所有文件,而不管名称如何...这可能不是最佳解决方案...但您可能会使其工作变得足够简单

真的,如果您想查找特定大小的所有文件...只是普通的旧 bash/sed/awk 可能效果最好

【讨论】:

我不知道os.path.getsize。它只是os.stat(path).st_size 的包装吗? 我想是的......我所知道的是它对我有用:P 并且它比 stat 更 Pythonic 恕我直言:P 同意RE:更多pythonic【参考方案3】:

您可以使用以下sn-p获取文件大小。

import os
os.path.getsize('./path/to/file')

因此您可以获取每个文件的大小,然后根据大小对文件进行排序。

【讨论】:

恕我直言,这比 stat 更受欢迎(基本上是因为它更具可读性)+1【参考方案4】:

使用 os.stat 查找文件大小。

filestats = os.stat(filename)
filesize = filestats.st_size

【讨论】:

+1 虽然这需要更多的充实【参考方案5】:

要获取文件的大小,请使用:

os.path.getsize(path)

以字节为单位返回值

所以:

def get_files_by_size(path, size):
""" Returns a list of files that are the size provided """
    result = []

    for root, dirs, files in os.walk(path):
        for file in files:
            path = os.path.join(root, file)

            if os.path.getsize(path) == size:
                result.append(path)
    return result

【讨论】:

好答案 (+1) :) 假设这就是他想要做的......(尽管我仍然认为该函数作为生成器效果更好) 是的,无论哪种方式都有效。有时我觉得生成器会增加不必要的复杂性。 在这种情况下,它几乎肯定会消除复杂性(无需维护您的结果列表)【参考方案6】:

我认为您必须查看以下链接,该链接使您能够按大小获取文件: http://my.safaribooksonline.com/book/programming/python/0596001673/files/pythoncook-chp-4-sect-24 基本上它说,获取关于 start 的每个项目(文件和子目录)的统计信息,其中 start 可以是根目录并从那时起遍历子目录。

【讨论】:

这并不比仅链接的答案好。

以上是关于如何使用 Python 按文件大小搜索文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Linux中查找文件然后报告搜索文件的大小[重复]

如何知道给定文件的大小是不是小于 10MB? Python [重复]

查找泡菜文件python的字节大小[重复]

如何在目标c中获取mac中所有文件的大小[重复]

使用 javascript/jquery 验证文件上传 [重复]

文件搜索