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

Här diskuteras programmering och utveckling
lilmini
Inlägg: 35
Blev medlem: 19 maj 2008, 19:31
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS
Ort: Hässleholm

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

Inlägg 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 ;)
Senast redigerad av 1 lilmini, redigerad totalt 30 gånger.
Varning: Inlägg som gjorts av användaren "lilmini" kan innehålla stavfel och felaktig grammatik, alergiker bör hålla sig borta!
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: [PYTHON] Ett bildsökningsprogram

Inlägg 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,
Användarvisningsbild
DeepThought
Inlägg: 2769
Blev medlem: 19 dec 2006, 11:07
OS: Arch Linux
Ort: Göteborg

Re: [PYTHON] Ett bildsökningsprogram

Inlägg 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
Skriv svar

Återgå till "Programmering och webbdesign"