Leggere un file a gruppi di righe

Eccomi con una nuova domanda da nubbio!
Ho bisogno di leggere un file a gruppi di N righe.
Ogni riga sarà una coordinata di un punto(X,Y,Z).
Ogni gruppo di righe (cioè di punti) sarà una curva.
Il file conterrà un numero imprecisato di curve.
Ho letto un po’ in giro, ma non ci capisco molto, potete darmi una mano?
Grazie

Ciao Federico
Per leggere ‘n’ linee tipo ‘11.11,22.22,33.33’
da un file ‘p.txt’ si puo’ provare una cosa come:

f = open( 'p.txt' )
pts = []
for i in range( n ):
  line = f.readline()
  co = line.split( ',' )
  pts.append( co )

nella lista pts ci saranno n liste di 3 valori.
Era questo il problema ?

Ciao !

Ho dimenticato la conversione in float, eccola

f = open( 'p.txt' )
pts = []
for i in range( 7 ):
  line = f.readline()
  co = line.split( ',' )
  co = [ float( num ) for num in co ]
  pts.append( co )

Grazie!
Con questo ho capito come ottenere la lista di tutti i punti per creare una curva.
Il mio file però contiene tante curve, che non so quante sono.
Quello che per ora mi viene in mente è di contare le linee del file e di dividerle per il numero di punti di una curva.
O c’è un metodo migliore?

Puoi usare ancora split() per dividere le varie curve. Ognuna di essa sarà indicata in qualche modo nel file, o no?

Le istruzioni di prima servono a leggere una curva.
Per leggere tutte le curve basta inserirle in un ciclo,
controllando quando il file finisce:

( Scusa, ma il fenomeno Discourse non mi prende piu’ la formattazione, per cui l’indentazione la devi ricostruire …)

f = open( ‘p.txt’ )
goon = True
while goon:
pts = []
for i in range( n ):
line = f.readline()
if not line:
goon = False
break
co = line.split( ‘,’ )
co = [ float( num ) for num in co ]
pts.append( co )

Ciao !

Mi permetto di correggere il “Maestro”:

import rhinoscriptsyntax as rs
import scriptcontext

filename = rs.OpenFileName("Open", "CSV Files (*.csv)|*.csv|Text Files (*.txt)|*.txt||","csv")

if filename:
    f = open( filename )

goon = True
pts = []

while goon:
    line = f.readline()
    if not line:
        goon = False
        break
    co = line.split( ',' )
    co = [ float( num ) for num in co ]
    pts.append( co )
        
print pts

Ho aggiunto la richiesta per la selezione del file, che è più elegante, e portato fuori pts=[] sennò resetta pts ogni volta.

Ciao

Grazie mille a tutti!
Problema risolto e controllato!

Hahaha … grazie della correzione, Professore ! :smiley:
Ma credo siano due modi diversi di procedere…
Le mie istruzioni servivano a leggere ogni volta N punti per poi costruire la relativa curva
(operazione non specificata e lasciata al buon Federico)
Con le tue, se ho capito bene, otteniamo una lista unica, che poi Federico (sempre lui :slight_smile: ) dovra’ splittare per
costruire le sue curve.

… due modi al prezzo di uno … hehehe.
Ciao !

1 Mi Piace