Forum >> Principianti >> iterazione di un array che non parte da zero

Pagina: 1 2 Avanti

Ciao a tutti, ho appena cominciato a scoprire questo interessante linguaggio (la mia esperienza è in prevalenza su C) e ho un problema. Devo leggere un file di testo una riga alla volta, copiarlo in un array ed eliminare il carattere di a capo \n. Fino a qui tutto bene:

file = open('mioElenco.txt','r')

numeriDaCopiare=file.readlines()

for i in range(0, len(numeriDaCopiare)):

numeriDaCopiare = int(numeriDaCopiare.strip("\n"))

numeriCopiati=numeriDaCopiare

file.close()

se provo a stampare il contenuto dell'array, quindi print (numeriCopiati) vedo tutti i numeri presenti nel file di partenza.

Il problema è che se provo a scorrere l'array con un ciclo for:

for i in range(0,len(numeriCopiati),1):

print (numeriCopiati)

la lettura dei valori inizia circa dalla posizione 125 (in totale sono 521 elementi)

Per quale motivo succede questo? Ho provato anche con un ciclo while, ma con lo stesso risultato, eppure se provo a stampare una riga per volta, indicando la posizione dell'array, es. print(numeriCopiati0), print(numeriCopiati1) ecc. i valori stampanti sono corretti.

Successivamente vorrei lanciare in DOS un comando copy, passando come parametro in origine l'elenco di numeri contenuti nell'array. E' possibile fare questo con Python?

Ringrazio in anticipo per l'aiuto.


--- Ultima modifica di Daniele aka Palmux in data 2015-03-29 14:02:21 ---
Ciao caro, dammi un'ultima informazione: che cosa c'è nel file?

Fammi un esempi delle righe presenti.


--- Ultima modifica di Daniele aka Palmux in data 2015-03-29 14:06:07 ---
Ciao, i dati contenuti nel file sono semplicemente dei numeri:




18624

18625

18627

18628

18629

18630

18631





ecc. sono 521 numeri. Come ho scritto, se provo a leggere l'array (o forse si tratta di una lista? Come ho specificato sono nuovo di Python) con un ciclo, la lettura parte circa dalla riga 127. Non riesco assolutamente a capire il perché.. Ho provato sia con un ciclo while che con un for. Se riuscissi ad aiutarmi mi faresti un grande favore.


--- Ultima modifica di dragonet in data 2015-03-29 18:46:37 ---
ecc. sono 521 numeri. Come ho scritto, se provo a leggere l'array (o forse si tratta di una lista? Come ho specificato sono nuovo di Python) con un ciclo, la lettura parte circa dalla riga 127. Non riesco a capacitarmi del motivo. Ho provato sia con un ciclo while che con un for. Se riuscissi ad aiutarmi mi faresti un grande favore.

Hai un file come questo:
Prima riga
Seconda riga
Sembra che io sia una riga, la terza
[...]
Lo apri come hai scritto sopra:
file = open('mioElenco.txt','r') # r lo potresti anche omettere se ricordo bene, è implicito, ma se metti 'a' ad esempio vai a fine file (append)
Semplicemente a questo questo punto usa il metodo readline() (attenzione senza s finale), così leggi il file dalla prima riga e così via ogni volta che lo invochi fino a fine file. Se devi reggere una riga alla volta è il metodo migliore, visto che gli altri metodi a disposizione ti leggono il file tutto in una volta.

Il metodo readlines() invece, ti trasforma tutto in un lista, mentre read() tutto in stringa:
>>> diventa_lista = f.readlines()
out: ['Prima riga\n',  'Seconda riga\n',  'Sembra che io sia una riga, la terza']

>>> type(diventa_lista)
out: list

>>> diventa_stringa = f.read()
out: 'Prima riga\nSeconda riga\nSembra che io sia una riga, la terza'

>>> type(diventa_stringa)
out: str


A questo punto, a seconda delle tue esigenze, puoi fare davvero tutto quello che vuoi.

Daniele
Ciao, i dati contenuti nel file sono semplicemente dei numeri:




18624

18625

18627

18628

18629

18630

18631





ecc. sono 521 numeri. Come ho scritto, se provo a leggere l'array (o forse si tratta di una lista? Come ho specificato sono nuovo di Python) con un ciclo, la lettura parte circa dalla riga 127. Non riesco assolutamente a capire il perché..
strano. potresti allegare il file originale?
THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Ti allego il file, io non so più che pesci pigliare...
Allegati
@Daniele







ho provato con il metodo che mi hai indicato:

















file = open('elencoNumeri.txt','r')









i=0









while i < 10:



riga=file.read()



print(riga)



i = i + 1











ma la lettura dei numeri del file parte dalla riga 233...


--- Ultima modifica di C8E in data 2015-03-30 16:14:03 ---
ho provato con il metodo che mi hai indicato:
file = open('elencoNumeri.txt','r')

i=0

while i < 10:

riga=file.read()

print(riga)

i = i + 1
Beh no, non hai fatto esattamente come ti ho detto, attento perché hai messo la lettura del file dentro il ciclo e così non ne vieni fuori sano.



Se vuoi che il tuo codice abbia un senso prova così:
file = open('elencoNumeri.txt','r')
dati = file.readlines()
for x in dati:
   print(x)
Non dirmi che così non ottieni una riga per valore, non ti credo... ;)

Fammi sapere.
Daniele
> @Daniele
> ho provato con il metodo che mi hai indicato:
> ma la lettura dei numeri del file parte dalla riga 233...

Non saprei cosa dirti, A Me Funziona™...

>>> numeri = [int(i) for i in open('elencoNumeri.txt')]
>>> len(numeri), numeri[ 0 ], numeri[ -1 ]
(521, 18624, 20573)

$ wc -l elencoNumeri.txt; head -1 elencoNumeri.txt; tail -1 elencoNumeri.txt
521 elencoNumeri.txt
18624
20573
THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
@Daniele: con il tuo metodo la lettura del file parte dalla riga 378!!!

Sai spiegarmi il perché? Inoltre, per quale motivo la lettura delle righe del file all'interno del ciclo sarebbe un errore?

Questo (in linguaggio C) a me funziona:
fp=fopen(par,"r"); //nome file da leggere passato da riga di comando
while(!feof(fp))
{
fgets(buffer,DIM,fp);
//printf("file numero, %s",buffer);

anche se ho lo stesso problema (lettura del file dalla riga sbagliata), a meno di non diminuire le righe del file (fino a 200 funziona correttamente). Con Python invece anche diminuendo le righe ho lo stesso problema.

C'è un'altra cosa che non capisco: in Python non si usa un indice per leggere un array?

Sono un tantino confuso...


--- Ultima modifica di Daniele aka Palmux in data 2015-04-18 12:45:51 ---


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.