Aus der Dokumentation entnommen, ist das Folgende ein Ausschnitt, der zeigt, wie die Regex-Methode findall funktioniert, und bestätigt, dass es eine Liste zurückgibt.Python: Regex findall gibt eine Liste zurück, warum gibt der Versuch, auf das Listenelement [0] zuzugreifen, einen Fehler zurück?
re.findall(r"\w+ly", text)
['carefully', 'quickly']
jedoch das folgende Codefragment einen außerhalb der Grenzen Fehler erzeugt (IndexError: list index out of range
), wenn das nullte Element der Liste von zurück findall zuzugreifen versuchen.
Relevante Codefragment:
population = re.findall(",([0-9]*),",line)
x = population[0]
thelist.append([city,x])
Warum passiert das das?
Für etwas mehr Hintergrund ist hier, wie das Fragment in mein ganzes Skript passt:
import re
thelist = list()
with open('Raw.txt','r') as f:
for line in f:
if line[1].isdigit():
city = re.findall("\"(.*?)\s*\(",line)
population = re.findall(",([0-9]*),",line)
x = population[0]
thelist.append([city,x])
with open('Sorted.txt','w') as g:
for item in thelist:
string = item[0], ', '.join(map(str, item[1:]))
print string
EDIT: Lesen Sie Kommentar unten für einige Hintergrundinformationen darüber, warum das passiert ist. Meine schnelle Lösung war:
if population:
x = population[0]
thelist.append([city,x])
Die Regex wird nicht immer übereinstimmen und eine leere Liste zurück manchmal – JBernardo
, dass Fragment Lauf unabhängig von der Python-Shell gibt an, dass es funktioniert. Die gleiche Eingabedatei wird ebenfalls verwendet. – Louis93
offensichtlich nicht für * alle * Zeilen. –