Otrzymujesz pustą listę Data=[]
, jeśli czytasz pusty wiersz. Próbujesz pobrać pierwszy element z listy, używając Data[0]
, ale ponieważ jest to pusta lista, nie ma elementu na pozycji 0, więc otrzymasz 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
To wydrukować Data
jeżeli IndexError
occours - można zobaczyć siebie, że drukuje pustą listę:
f=open('file','r')
temp = []
for row in f.readlines():
Data = row.split()
try:
temp.append(float(Data[0]))
except IndexError:
print Data
można użyć oświadczenie with
do otwarcia pliku, który automatycznie zamyka plik po przetworzeniu. Możesz także przechwytywać sam plik, bez używania 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: Lepiej z wykorzystaniem modułu 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) jest twoim przyjacielem. –
... nie powinno to być "dla wiersza w f.readlines():' lub bardziej po prostu 'dla wiersza w f'? – nneonneo