How to search file by its size using Python
本问题已经有最佳答案,请猛点这里访问。
我犯了错误。需要使用python编写代码,使用python按文件大小查找文件,并将其名称和大小添加到列表中。我有一个程序,它按文件名搜索目录中的文件。我需要用get opts做另一个标记来按大小进行搜索。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 2 3 4 5 6 | 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 |
我想会有用的…此外,它还可以简化您的匹配程序…把它变成发电机
如果您尝试匹配给定大小的所有文件,而不考虑名称…这可能不是最好的解决方案…但你可能会让它变得足够简单
真的,如果你想找到某个大小的所有文件…只是简单的老巴什/塞德/awk可能效果最好
os.walk提供了路径和文件名。然后你可以使用
1 2 | stats = os.stat(path+name) stats.st_size |
以字节为单位获取文件大小。所以你可以把你当前的函数改成:
1 2 3 4 5 6 7 8 | 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 |
另外,您不需要传递result-in,因为您只是用一个空列表替换它。python可以从函数返回列表。
要获取文件的大小,请使用:
1 | os.path.getsize(path) |
返回以字节为单位的值
所以:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
使用os.stat查找文件大小。
1 2 | filestats = os.stat(filename) filesize = filestats.st_size |
您可以使用以下代码段获取文件大小。
1 2 | import os os.path.getsize('./path/to/file') |
所以你可以得到每个文件的大小,然后根据大小对文件进行排序。
我认为您必须查看以下链接,它使您能够根据大小获取文件:http://my.safaribooksonline.com/book/programming/python/0596001673/files/pythoncook-chp-4-sect-24基本上,它说,获取开始的每个项目(文件和子目录)的统计信息,从那时起,开始可以是根目录,并在子目录中遍历。