Si ottiene una lista vuota Data=[]
se si legge una riga vuota. Si tenta di ottenere il primo elemento dall'elenco utilizzando Data[0]
, ma poiché è un elenco vuoto non ha un elemento in posizione 0, quindi si ottiene un IndexError
.
Data=''.split()
Data[0]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-686-0792b03cbbdf> in <module>()
----> 1 Data[0]
IndexError: list index out of range
Questo stamperà i Data
se IndexError
occours - potete vedere voi stessi che stampi una lista vuota:
f=open('file','r')
temp = []
for row in f.readlines():
Data = row.split()
try:
temp.append(float(Data[0]))
except IndexError:
print Data
È possibile utilizzare l'istruzione with
per aprire il file, che chiude automaticamente il file dopo essere stato elaborato. Inoltre è possibile eseguire il looping del file stesso, senza utilizzare readlines()
.
with open(file,'r') as f:
for row in f:
Data = row.split()
try:
print Data[0]
except IndexError:
print 'You have an empty row'
EDIT: Sei meglio di utilizzare il modulo csv:
import csv
with open('file.csv', 'rb') as f:
reader = csv.reader(f, delimiter=' ')
print [row[0] for row in reader if len(row)]
>>>
['16', '17', '18', '20', '21', '22', '24', '25', '26']
['csv'] (http://docs.python.org/library/csv.html) è tuo amico. –
... non dovrebbe essere 'per riga in f.readlines():' o più semplicemente 'per riga in f'? – nneonneo