import imgcompare
...
for filename in os.listdir(myPath):
if filename.endswith(".png"):
listIm1.append(filename)
for filename2 in os.listdir(myPath2):
if filename2.endswith(".png"):
listIm2.append(filename2)
Also fülle ich meine beiden Listen mit Bildern. Jetzt möchte ich die Bilder der beiden Listen nacheinander nach demselben Index vergleichen, zum Beispiel:
listIm1 [0] mit listImg2 [0]
listIm1 [1] mit listImg2 [1]
und so weiter ... und das ist der Code:
for item in listIm1:
ifSame = imgcompare.is_equal(listIm1[item],listIm2[item],tolerance=2)
print ifSame
Aber erhalte den Fehler:
same = imgcompare.is_equal(listIm1[item], listIm2[item], tolerance=2)
TypeError: list indices must be integers, not str
es scheint, dass imgcompare.is_equal () nicht mit Listen funktioniert. Gibt es ein pythonisches Hilfsmittel, damit es funktioniert?
3 Antworten
Schon seit
if filename2.endswith(".png"):
listIm2.append(filename2)
for item in listIm1:
# item = "someimagine.png"
ifSame = imgcompare.is_equal(listIm1[item],listIm2[item],tolerance=2)
#listIm1[someimagine.png] is what you are asking => retrun Type Error
Ich denke du suchst so etwas:
Bearbeiten:
import os
for filename in os.listdir(myPath):
if filename2.endswith(".png"):
img_path = os.path.join(myPath,filename2)
listIm2.append(img_path)
listIm1 = []
listIm2 = []
for i in range(len(listIm1)):
ifSame = imgcompare.is_equal(listIm1[i],listIm2[i],tolerance=2)
print ifSame
Und es ist besser, wenn len (listIm1) == len (listIm2)
Das Problem hierbei ist, dass Sie versuchen, den Index von listIm1
mithilfe von item
abzurufen. Was Sie tun möchten, ist ein range()
wie:
for i in range(len(listIm1)):
ifSame = imgcompare.is_equal(listIm1[i],listIm2[i],tolerance=2)
Wie @Matt hervorhob, funktioniert dies nur, wenn Sie vorher wissen, dass die Listen dieselbe Länge haben. Andernfalls wird ein Indexfehler ausgegeben.
Sie verwenden für jede Schleife eine, die jedes Element in Ihrer bereitgestellten Liste listIm1
erfasst und in einer temporären Variablen item
speichert. Anschließend übergeben Sie item
(eine Zeichenfolge) als Indizieren Sie beide Listen. Indizes einer Liste müssen eine Ganzzahl sein, und das ist der Fehler, den Sie erhalten.
for dir1_file in listIm1:
for dir2_file in listIm2:
ifSame = imgcompare.is_equal(dir1_file,dir2_file,tolerance=2)
print ifSame
Dieser Code verwendet zwei für jede Schleife. Er betrachtet jedes Element in beiden Listen und verwendet sie als Argumente für Ihre Methode.
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.