如何使用Python按文件大小搜索文件
我被卡住了。我需要使用Python编写代码,根据文件大小查找文件,并将其名称和大小添加到列表中。我有一个程序,可以按名称搜索目录中的文件。我需要用get opts做另一个标记,以便按大小进行搜索如何使用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
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