media di .txt file con str ed int all'interno di esso

voti
0

Sto creando una funzione che legge un .txtfile che contiene quanto segue:

Testing.txt:

a 1 34
b 2 25
c 3 23
j 4 80

Ho bisogno di creare una funzione che legge questo file e stampa la media degli ultimi 2 cifre di ogni riga nel file.

Quello che ho finora è questo:

def Stats():

    filename = input(Enter a file name: )
    with open(filename) as f:
        data = [int(line) for line in f]

    print(The average value is , sum(data)/len(data))


Stats()

Professionisti:

  • questa funzione produrrà la media dei valori int all'interno di una funzione.

contro:

  • Non funzionerà se il file contiene al suo interno str.

Domanda: Come posso ottenere la mia funzione di lavorare con un file come quello di cui sopra chiamata (testing.txt)?

È pubblicato 05/04/2015 alle 00:15
fonte dall'utente
In altre lingue...                            


4 risposte

voti
1

Credo che questo è ciò che stai cercando:

# filename = input("Enter a file name: ")
filename = "input.txt"

def avg_file(filename):

    with open(filename, 'r') as f:
        data = [int(line.split()[2]) for line in f]
        return sum(data)/len(data)


avg =  avg_file(filename)

print("The average value is: ", avg)
# The average value is:  40.5

la chiave è questa line.split()[2]. Questo divide una linea basata su spazi, e prende il valore 3 °.

Risposto il 05/04/2015 a 00:23
fonte dall'utente

voti
1

Si potrebbe ignorare non i numeri in questo modo:

data = [int(token) for token in f.read().split() if token.isdigit()]
Risposto il 05/04/2015 a 00:23
fonte dall'utente

voti
1

Che dire qualcosa del tipo:

import csv

def mean(lst): return sum(lst) / len(lst)

with open('input.txt') as f:
    reader = csv.reader(f, delimiter=' ')
    lines = [line for line in reader]

col3 = [int(line[2]) for line in lines]

print(mean(col3))  # 40.5

Questo utilizza solo il modulo csv per analizzare le linee di file in righe che contengono elementi. Si potrebbe ottenere la stessa cosa con qualcosa di simile:

def mean(lst): return sum(lst) / float(len(lst))

with open('input.txt') as f:
    lines = [line.split() for line in f]

col3 = [int(line[2]) for line in lines]

print mean(col3)  # 40.5
Risposto il 05/04/2015 a 00:24
fonte dall'utente

voti
1

Qualcosa come questo:

data = [sum(map(int, line.split(' ')[1:])) / 2 for line in f]

O qualcosa di più della vecchia scuola, nel caso in cui avete sconosciuto mix di stringa e valori int:

data = []
for line in f:
    integers = []
    for segment in line.split():
        try:
            integers.append(int(segment))
        except ValueError:
            pass
    data.append(sum(integers) / len(integers))
Risposto il 05/04/2015 a 00:24
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more