La lettura di un file e di memorizzare i valori in variabili in python

Diciamo che ho un nome di file (test.txt) con i seguenti dati:

AA11 BB11 CC11 DD11
AA22 BB22 CC22 DD22
AA33 BB44 CC44 DD33

in bash (shell scripting) posso effettuare le seguenti operazioni:

cat test.txt | while read a b c d 
do
echo "this is the first column $a "
echo "this is the second column $b "
echo "this is the third column $c "
echo "this is the fifth column $d "
done

Come posso fare lo stesso con python? come posso memorizzare il valore di ogni colonna in una variabile e quindi leggere il file riga per riga, mentre la memorizzazione e la manipolazione del loro valore?

 

4 Replies
  1. 7
    file = open('test.txt')
    for line in file:
        fields = line.strip().split()
        print fields[0], fields[1], fields[2], fields[3]

    Python è così facile 🙂

    Per essere più specifici, split() divide il contenuto di una stringa in campi delimitati da alcuni delimitatore (per impostazione predefinita, qualsiasi carattere vuoto, ad esempio, lo spazio, tab, etc.), e restituisce un array con la divisione dei campi. strip() strisce di tutti i caratteri vuoti all’inizio e alla fine di una riga. E un file in python è un iterable oggetto che quando iterati la parola chiave in, dà le linee nel file uno a uno. Per ulteriori informazioni su questo, si può guardare http://docs.python.org/2/library/stdtypes.html#str.split , http://docs.python.org/2/library/stdtypes.html#str.strip , http://docs.python.org/2/library/stdtypes.html#bltin-file-objects .

    • Grazie mille!!! Ho davvero apprezzato!!
    • Questo sarebbe meglio usare un contesto manager per aprire e chiudere il file 😉
  2. 1
    with open('test.txt') as infile:
      lines = [line.strip().split() for line in infile] # bad for large files
      col1, col2, col3, col4 = itertools.izip(*lines)

    Ora, ogni cols dispone di tutte le voci per ciascuna delle quattro colonne

  3. 1

    Utilizzando csv modulo:

    import csv 
    
    nth = {
        1: "first",
        2: "second",
        3: "third",
        4: "fourth"
    }
    
    with open('test.txt', 'r') as f:
        reader = csv.reader(f, delimiter=" ")
        for row in reader:
            for index, item in enumerate(row):
                print "this is the %s column %s" % (nth[index + 1], item) 

    E, la stessa senza l’utilizzo di csv:

    nth = {
        1: "first",
        2: "second",
        3: "third",
        4: "fourth"
    }
    
    with open('test.txt', 'r') as f:
        for row in f:
            for index, item in enumerate(row.split()):
                print "this is the %s column %s" % (nth[index + 1], item.strip()) 

    stampa:

    this is the first column AA11
    this is the second column BB11
    this is the third column CC11
    this is the fourth column DD11
    this is the first column AA22
    this is the second column BB22
    this is the third column CC22
    this is the fourth column DD22
    this is the first column AA33
    this is the second column BB44
    this is the third column CC44
    this is the fourth column DD33
    • Grazie un milione!!!
  4. 1

    La risposta di Subhasis Das è bene per quanto riguarda l’apertura dei file, la suddivisione e così via.
    Ma si voleva avere i valori delle variabili. Facile, troppo. Invece di

    fields = line.strip().split()

    scrivere

    a,b,c,d = line.strip().split()

    Per linee con più o meno di quattro colonne, questo genererà un’eccezione, però.

    • Eccezionale! Grazie!!!

Lascia un commento