Tratto dalla documentazione, il seguente è un frammento che mostra come funziona la ricerca del metodo regex e conferma che restituisce una lista.Python: il findex di Regex restituisce un elenco, perché il tentativo di accedere all'elemento list [0] restituisce un errore?
re.findall(r"\w+ly", text)
['carefully', 'quickly']
Tuttavia il seguente frammento di codice genera un errore di limite (IndexError: list index out of range
) quando si tenta di accedere all'elemento zero della lista restituita da findall.
Rilevante frammento di codice:
population = re.findall(",([0-9]*),",line)
x = population[0]
thelist.append([city,x])
Perché accade questo?
Per alcuni più di fondo, ecco come quel frammento si inserisce in tutta la mia sceneggiatura:
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: Leggi commento qui sotto per alcuni retroscena sul perché questo è accaduto. La mia soluzione rapida era:
if population:
x = population[0]
thelist.append([city,x])
L'espressione regolare non corrisponde sempre e restituire un elenco vuoto talvolta – JBernardo
Esecuzione quel frammento indipendente sul guscio Python indica che lo fa. Viene utilizzato anche lo stesso file di input. – Louis93
ovviamente non per * tutte * le linee. –