我坚持了下来。需要使用python编写代码并使用Python查找其大小的文件,并将其名称和大小添加到列表中。我有一些程序,它通过名称在目录中搜索文件。我需要制作另一个标志,并选择按大小进行搜索。
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()
答案 0 :(得分:3)
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可以从函数返回列表。
答案 1 :(得分:3)
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 可能效果最好
答案 2 :(得分:1)
您可以使用以下代码段获取文件大小。
import os
os.path.getsize('./path/to/file')
因此,您可以获取每个文件的大小,然后根据大小对文件进行排序。
答案 3 :(得分:1)
使用os.stat查找filesize。
filestats = os.stat(filename)
filesize = filestats.st_size
答案 4 :(得分:1)
要获取文件的大小,请使用:
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
答案 5 :(得分:0)
我认为您必须查看以下链接,该链接可让您按照大小获取文件: http://my.safaribooksonline.com/book/programming/python/0596001673/files/pythoncook-chp-4-sect-24 基本上它说,获取每个项目的文件的统计信息 - 文件和子目录 - 开始的地方可以是root,然后从sub-dir遍历。