Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python按文件大小搜索文件_Python_Linux - Fatal编程技术网

如何使用Python按文件大小搜索文件

如何使用Python按文件大小搜索文件,python,linux,Python,Linux,我被卡住了。我需要使用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 functi

我被卡住了。我需要使用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()

您可以使用以下代码段获取文件大小

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

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

使用os.stat查找文件大小

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

我认为您必须查看以下链接,它使您能够按大小获取文件:
基本上,它说,获取start的每个项(文件和子目录)的统计信息,其中start可以是root,然后在sub dir中遍历。

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可以从函数返回列表

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
我想会有用的。。。此外,它大大简化了您的匹配程序。。。把它变成发电机

如果您试图匹配给定大小的所有文件,而不考虑名称。。。这可能不是最好的解决方案。。。但你可以让它变得足够简单

真的,如果你想找到所有特定大小的文件。。。只是简单的老把戏/sed/awk
可能最有效

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

os.path.getsize(path)
返回以字节为单位的值

因此:


我觉得这是一个很好的主题问题,但很难解析,因为提问者不熟悉英语。有人能翻译吗?他想知道文件的大小你可以使用os.stat函数找到文件大小,如下所述[here][1][1]:@AdamSmith我只是想用find_by_name函数按文件大小解析文件。抱歉我的英语不好:)@user3642703没必要为你的英语不好道歉——我几乎可以保证你说我的语言比我说你的好!这几乎不比一个只有链接的答案好。+1虽然这需要更多的充实,但我对
os.path.getsize
一无所知。它只是一个
os.stat(path).st_size
的包装器吗?我想是的。。。我只知道它对我有用:P,它比stat更像pythonicOkay,但是我怎么能像在函数find_by_name中那样检查它的大小呢?好答案(+1):)假设他正试图这么做。。。(尽管我仍然认为该函数作为生成器工作得更好)是的,两种方法都可以。有时我觉得生成器会增加不必要的复杂性。在这种情况下,它几乎肯定会消除复杂性(不需要维护结果列表),这比stat更可取(基本上是因为它更可读)+1
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