La lettura più numeri da un file di testo

Io sono nuovo alla programmazione in python e bisogno di aiuto per fare questo.

Ho un file di testo con diversi numeri come questo:

12 35 21
123 12 15
12 18 89

Ho bisogno di essere in grado di leggere i numeri di ogni riga per essere in grado di utilizzare in formule matematiche.

  • [map(float, ln.split()) for ln in open("filename") if ln.strip()]

 

5 Replies
  1. 12

    In python, si legge una riga da un file in una stringa. Si può quindi lavorare con la stringa per ottenere i dati di cui avete bisogno:

    with open("datafile") as f:
        for line in f:  #Line is a string
            #split the string on whitespace, return a list of numbers 
            # (as strings)
            numbers_str = line.split()
            #convert numbers to floats
            numbers_float = [float(x) for x in numbers_str]  #map(float,numbers_str) works too

    Ho fatto tutto in una manciata di passi, ma capita spesso di vedere persone che li uniscono:

    with open('datafile') as f:
        for line in f:
            numbers_float = map(float, line.split())
            #work with numbers_float here

    Infine, il loro utilizzo in una formula matematica è troppo facile. Prima di tutto, creare una funzione:

    def function(x,y,z):
        return x+y+z

    Ora scorrere il file di chiamare la funzione:

    with open('datafile') as f:
        for line in f:
            numbers_float = map(float, line.split())
            print function(numbers_float[0],numbers_float[1],numbers_float[2])
            #shorthand:  print function(*numbers_float)
    • questo ha funzionato perfettamente, grazie
  2. 6

    Un altro modo per farlo è utilizzando numpy‘s funzione chiamata loadtxt.

    import numpy as np
    
    data = np.loadtxt("datafile")
    first_row = data[:,0]
    second_row = data[:,1]
  3. 0

    Il seguente codice dovrebbe funzionare

    f = open('somefile.txt','r')
    arrayList = []
    for line in f.readlines():
        arrayList.extend(line.split())
    f.close()
  4. 0

    Questo dovrebbe funzionare se il nome del file numbers.txt

    def get_numbers_from_file(file_name):
        file = open(file_name, "r")
        strnumbers = file.read().split()
        return map(int, strnumbers)
    
    
    print get_numbers_from_file("numbers.txt")

    questo deve tornare [12, 35, 21, 123, 12, 15, 12, 18, 89]
    dopo si può scegliere individuly tutti i numeri con list_variable[intergrer]

  5. 0

    Se si desidera utilizzare il nome del file come argomento sulla linea di comando, quindi è possibile effettuare le seguenti operazioni:

        from sys import argv
    
        input_file = argv[1]
        with open(input_file,"r") as input_data:
            A= [map(int,num.split()) for num in input_data.readlines()]
    
        print A #read out your imported data

    altrimenti si può fare questo:

        from os.path import dirname
    
        with open(dirname(__file__) + '/filename.txt') as input_data:
            A= [map(int,num.split()) for num in input_data.readlines()]
    
        print A

Lascia un commento