Sida 1 av 1

[PYTHON] Ett bildsökningsprogram [LÖST]

Postat: 29 okt 2008, 13:13
av lilmini
Jag håller på att göra ett bildsökningsprogram som jag inte kan utveckla.
Programmet ska söka rekursivt och det är det som får felmeddelanden hela tiden.
Här är koden:

Kod: Markera allt

#!/usr/bin/env python

import os, sys
homedir = os.path.expanduser("~")
desktop = os.getcwd()
pf = [".jpg", ".gif", ".tif", ".png", ".svg", ".jpe", ".jpeg", ".tiff"]
headdirs = []
files = []
founds = []
subdirs = [ [] , [ ] ]
headdir = os.path.realpath("./")

def add_subdir(indir, subdir):
	try:
		p = subdirs[0].index(indir)
		subdirs[1][p].append(subdir)
	except:
		subdirs[0].append(indir)
		subdirs[1].append([subdir])

def get():
	dirfiles = os.listdir("./")
	cnum = len(dirfiles) - 1
	loop = 1
	while loop == 1:
		try:
			tmp = os.path.realpath(dirfiles[cnum])
			if os.path.isdir(tmp) == True:
				add_subdir(os.path.realpath("./"), tmp)
			elif os.path.islink == True:
				pass
			else:
				files.append(tmp)
			del dirfiles[cnum]
		except:
			pass
		if len(dirfiles) == 0:
			wdir = os.path.realpath("./")
			i = subdirs[0].index(wdir)
			subd = len(subdirs[1][i])
			dirlist = subdirs[1][i]
			cdir = dirlist[subd-1]
			num = dirlist.index(cdir)
			while subd > 0:
				os.chdir(cdir)
				del subdirs[1][i][num]
				dirfiles = os.listdir("./")
				cnum = len(dirfiles) - 1
		else:
			cnum = cnum - 1

def search(output=""):
	dirfiles = os.listdir("./")
	num = len(files)
	place = 0
	while num > 0:
		tmp = files[place]
		if os.path.isdir(tmp) == False:
			if len(tmp) > 5:
				if test(tmp)[0] == True:
					founds.append(tmp)
		else:
			headdirs.append(os.path.realpath("./"))
			if os.path.islink == True:
				x = headdirs.index("./")
				del dirs[x]
			else:
				os.chdir(tmp)	
		place = place + 1
		num = num - 1
	if num == 0:
		numdir = len(dirs)
		while numdir > 0:
			os.chdir(dirs[numdir-1])
			del dirs[numdir-1]
			search()
			numdir = len(dirs)

def test(ifile):
	status = False
	if len(ifile) > 5:
		times = len(aff)
		while times > 0:
			app = aff[times-1]
			if ifile[-len(app):] == app:
				status = True
			times = times - 1
	return [status, ifile]

#try:
#	search()
#except RuntimeError:
#	print "Oops, too much at the same time!"

get()

numfounds = len(founds)
founds.reverse()
while numfounds > 0:
	print founds[numfounds-1]
	del founds[numfounds-1]
	numfounds = len(founds)
Det skulle vara jättebra om någon kunde hjälpa mig.
P.S Det är GPL och får kopieras ;)

Re: [PYTHON] Ett bildsökningsprogram

Postat: 29 okt 2008, 14:08
av David Andersson
Är det tillåtet att fuska? I så fall verkar det enklast att anropa unix-kommandot "find" i en shell:

Kod: Markera allt

#!/usr/bin/env python

import os

pf = ["jpg", "gif", "tif", "png", "svg", "jpe", "jpeg", "tiff"]

findcommand = 'find -regex ".*\\.\\('+'\\|'.join(pf)+'\\)"'

filesfile = os.popen(findcommand)

for filename in filesfile:
    print filename,

Re: [PYTHON] Ett bildsökningsprogram

Postat: 29 okt 2008, 14:31
av DeepThought
Jag har rätt så lite erfarenhet och kan egentligen inte Python, men jag skrev ett script som sökte igenom angiven sökväg efter körbara filer (vagt baserat på ett annat script som gör precis det du vill göra: hittar bildfiler). Du borde kunna använda delar av det, men modifiera kriteriet för körbarhet till att gälla bildfiler istället!

os.path.walk() var mycket användbart ;) I ditt fall tror jag att imghdr kan vara lämligt att importera också.

Mitt script:
http://ubuntu-se.org/phpBB3/viewtopic.php?f=195&t=32828

wallmenu, som letar upp bildfiler:
http://david.chalkskeletons.com/scripts/wallmenu-0.3.py

Jag vet inte exakt hur du vill spara ner informationen om vilka filer som är bildfiler, men detta är ett snabbt utkast att jobba utifrån:

Kod: Markera allt

#!/usr/bin/env python

import os,imghdr

# De kataloger du vill titta i 
PATH = ['/en/lista','/med/alla','/kataloger']
# Lista de filtyper du vill leta efter
filetypes = ['jpg','gif','tif','png','svg','jpe','jpeg','tiff']
# En lista med alla bildfiler

def findpics(path):
    pics = []
    for directory in path:
        for root,dirs,files in os.walk(directory):
            for r in [root]:
                for f in [files]:
                    if (imghdr.what(os.path.join(root,f)) in filetypes):
                        pics.append(os.path.join(root,f))
    return pics

p = findpics(PATH)
print p