-
Notifications
You must be signed in to change notification settings - Fork 0
/
lezione_5.py
84 lines (59 loc) · 2.54 KB
/
lezione_5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#==============================
# Classe per file CSV
#==============================
class CSVFile():
def __init__(self, name):
self.name = name
self.can_read_file = True
def get_data(self):
# Inizializzo una lista vuota per salvare tutti i dati
data = []
try:
# Apro il file
file = open(self.name, 'r')
# Leggo il file linea per linea
for line in file:
# Faccio lo split di ogni linea sulla virgola
elements = line.split(',')
# Se NON sto processando l'intestazione...
if elements[0] != 'Date':
elements[-1] = elements[-1][0:-1]
# Aggiungo alla lista gli elementi di questa linea
data.append(elements)
# Chiudo il file
file.close()
except FileNotFoundError:
# Il file non può essere aperto o non è illeggibile
self.can_read_file = False
print('Errore di Ricerca File: "{}" non è presente nella directory'.format(self.name))
except Exception as e:
# Errore generico
print('Ho ottenuto un errore generico: "{}"'.format(e))
# Quando ho processato tutte le righe, restituisco i dati
return data
#==============================
# Classe per file NumericalCSV
#==============================
class NumericalCSVFile(CSVFile):
def get_data(self):
# Chiamo la get_data del genitore
string_data = super().get_data()
# Preparo lista per contenere i dati ma in formato numerico
numerical_data = []
# Ciclo su tutte le "righe" corrispondenti al file originale
for string_row in string_data:
try:
# Converto a float tutti gli elementi della riga tranne il primo. Ma se fallisco, stampo l'errore e passo alla riga successiva.
string_row[-1] = float(string_row[-1])
numerical_data.append(string_row)
except Exception as e:
# La stringa non è convertibile in stringa
print('Errore di Valore: "{}"'.format(e))
pass
return numerical_data
pippo = CSVFile('pippo.csv')
print(pippo.get_data())
shampoo_sales = CSVFile('shampoo_sales.csv')
print(shampoo_sales.get_data())
numerical_shampoo_sales = NumericalCSVFile('shampoo_sales.csv')
print(numerical_shampoo_sales.get_data())