Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-07 Per discussione Gollum1
Il 07 maggio 2013 11:18, Manlio Perillo  ha scritto:
>> bufferizzata con un buffer di 1MB al giro.
>
> 1MB forse è poco efficiente, meglio 4MB.
>

no, per quello che devo fare, mi servono blocchi da 1MB. almeno per
ora, poi in futuro vedremo se sarà il caso di cambiare.

> Semplice: `stdin.read()` restituisce una stringa, e ti basta calcolare
> la sua lunghezza con `len(s)`.  Quando non c'è più niente da leggere,
> `stdin.read()` restituisce una stringa vuota.

sì, alla fine ho seguito la traccia che mi ha postato Marco, con le
modifiche che mi servono per il mio compito, e funziona perfettamente.

Grazie.

Byez
--
Gollum1
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-07 Per discussione Manlio Perillo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Il 06/05/2013 23:11, Gollum1 ha scritto:
> Ciao a tutta la lista,
> 

Ciao e benvenuto.

> [...]
> eccomi alla prima domanda:
> 
> dovendo ricevere un file dallo standard input, come posso sapere la
> dimensione finale del file?
> 
> mi spiego meglio:
> 
> ricevo sullo stdin un file, lo leggo a blocchi con un loop e una read
> bufferizzata con un buffer di 1MB al giro.
> 

1MB forse è poco efficiente, meglio 4MB.

> la soluzione più semplice sarebbe mettere un contatore, a cui aggiungo
> ad ogni ciclo la dimensione del buffer, e fin qui, sembra una
> banalità. il problema arriva con l'ultimo blocco, anche se io prelevo
> dal file con una read da 1MB, i dati che vengono passati saranno
> probabilmente meno. La domanda spontanea è: posso in qualche modo
> sapere quanto di quel buffer è utilizzato ad ogni ciclo (pieno per
> tutti i cicli, una parte all'ultimo)?

Semplice: `stdin.read()` restituisce una stringa, e ti basta calcolare
la sua lunghezza con `len(s)`.  Quando non c'è più niente da leggere,
`stdin.read()` restituisce una stringa vuota.

> [...]


Ciao  Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlGIxucACgkQscQJ24LbaUTPwACfTGQt5HYzTSQLybjPwXgBQGZa
LDYAn1BRQFkSbD2SaUl1/dhPGTT+RHxs
=Tkcu
-END PGP SIGNATURE-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Gollum1
Il 07 maggio 2013 00:10, Marco Beri  ha scritto:

> Non conosco il libro, però sicuramente non l'ha scritto Var Rossum.
> Invece questo PEP l'ha scritto proprio lui:
> http://www.python.org/dev/peps/pep-0008/
>
> Ma in ogni caso ognuno fa quel che vuole (e ci mancherebbe) col suo codice.
>
> Soltanto quello è lo standard per cui quando uno legge:
> - Pippo pensa a una classe
> - pippo pensa a una variabile o una funzione
> - PIPPO pensa a una costante
>
> ecc.
>

ho iniziato a leggere il testo che mi hai passato... interessante,
anche se per certi versi mi pare un po' schizzoide... però credo che
sia questione solo di farci l'abitudine.

cercherò di procedere con un certo criterio e pulizia.

Byez
--
Gollum1
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Marco Beri
2013/5/7 Gollum1 

> Il 06 maggio 2013 23:54, Marco Beri  ha scritto:
> > Dai nomi minuscoli alle variabili :-) 
>
> oddio... ho iniziato a scriverli con l'iniziale in maiuscolo, perché
> così era consigliato nel libro "Pensare da informatico - Python"...
> avrò preso un abbaglio...
>

Non conosco il libro, però sicuramente non l'ha scritto Var Rossum.
Invece questo PEP l'ha scritto proprio lui:
http://www.python.org/dev/peps/pep-0008/

Ma in ogni caso ognuno fa quel che vuole (e ci mancherebbe) col suo codice.

Soltanto quello è lo standard per cui quando uno legge:
- Pippo pensa a una classe
- pippo pensa a una variabile o una funzione
- PIPPO pensa a una costante

ecc.

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Gollum1
Il 06 maggio 2013 23:54, Marco Giusti  ha scritto:
> On Mon, May 06, 2013 at 11:11:02PM +0200, Gollum1 wrote:
>> Ciao a tutta la lista,
>
> ciao
>
>> dovendo ricevere un file dallo standard input, come posso sapere la
>> dimensione finale del file?
>
> una traccia della soluzione è la seguente:
>
> ...
> size = 0
> BUFFER_SIZE = 2 ** 20
> while True:
> data = sys.stdin.read(BUFFER_SIZE)
> if not data:
> break
> size += len(data)
> ...

Quindi un ciclo infinito, che chiudo con un break invece di fare il
controllo sul blocco letto di volta in volta.
Sì, mi piace, è più lineare e pulito.

Grazie.
-- 
Gollum1
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Gollum1
Il 06 maggio 2013 23:54, Marco Beri  ha scritto:
>> eccole:
>>
>> fi = sys.stdin
>> Size = 1048576
>> Block = fi.read(Size)
>> while Block:
>>#Elaboro il blocco.
>>pass
>
>
> Quindi non è che crei un buffer di 1MB, semplicemente tenti di leggere 1MB
> di caratteri.

la cosa pare che funzioni bene anche se i "caratteri" sono in realtà i
byte di un file binario, ho provato semplicemente ad accorparli di
nuovo in un altro file e calcolare l'm5sum su entrambi, e coincidono.

> A questo punto ti basta fare len(Block) per ottenere il numero di caratteri
> letto.

quindi in realtà Blocco non ha per forza la dimensione di 1MB, ma
viene dimensionato in base a quello che legge? perfetto... faccio
qualche prova.

> Dai nomi minuscoli alle variabili :-) 

oddio... ho iniziato a scriverli con l'iniziale in maiuscolo, perché
così era consigliato nel libro "Pensare da informatico - Python"...
avrò preso un abbaglio...

in tutti gli altri linguaggi ho sempre usato le costanti maiuscole, e
la variabili in minuscolo, procederà allora con questo metodo.

Byez
--
Gollum1
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Marco Giusti
On Mon, May 06, 2013 at 11:11:02PM +0200, Gollum1 wrote:
> Ciao a tutta la lista,

ciao

> dovendo ricevere un file dallo standard input, come posso sapere la
> dimensione finale del file?

una traccia della soluzione è la seguente:

...
size = 0
BUFFER_SIZE = 2 ** 20
while True:
data = sys.stdin.read(BUFFER_SIZE)
if not data:
break
size += len(data)
...

ciao
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Marco Beri
2013/5/6 Gollum1 

> Il 06 maggio 2013 23:23, Marco Beri  ha scritto:
> > Potresti postare le due righe di codice qui sopra?
> > Come fai a creare un buffer di 1MB?
> > E come fai a usarlo nella read?
>
> eccole:
>
> fi = sys.stdin
> Size = 1048576
> Block = fi.read(Size)
> while Block:
>#Elaboro il blocco.
>pass
>

Quindi non è che crei un buffer di 1MB, semplicemente tenti di leggere 1MB
di caratteri.

A questo punto ti basta fare len(Block) per ottenere il numero di caratteri
letto.

Dai nomi minuscoli alle variabili :-) 

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Gollum1
Il 06 maggio 2013 23:23, Marco Beri  ha scritto:
> Potresti postare le due righe di codice qui sopra?
> Come fai a creare un buffer di 1MB?
> E come fai a usarlo nella read?

eccole:


fi = sys.stdin
Size = 1048576
Block = fi.read(Size)
while Block:
   #Elaboro il blocco.
   pass


Byez
--
Gollum1
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Marco Beri
2013/5/6 Gollum1 

> Ciao a tutta la lista,
>

Benvenuto e ciao anche a te.

ricevo sullo stdin un file, lo leggo a blocchi con un loop e una read
> bufferizzata con un buffer di 1MB al giro.
>

Potresti postare le due righe di codice qui sopra?
Come fai a creare un buffer di 1MB?
E come fai a usarlo nella read?

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Presentazione nuovo utente e prima domanda.

2013-05-06 Per discussione Gollum1
Ciao a tutta la lista,

   Prima di tutto mi presento, sono conosciuto in diversi ambienti
della rete come Gollum1, sono un utilizzatore da tempo di Linux, in
particolare di Debian Gnu/Linux. Mi interesso di programmazione, anche
se il tempo disponibile non è tantissimo, e le distrazioni sono
veramente tante.

Anni or sono mi ero sbizzarrito a studiarmi C, lisp, pascal,
qualcosina (molto poco) di prolog, e altre amenità del genere...
Ultimamente mi sono un po' perso con perl, ma dopo un primo sguardo a
python e alla sua struttura penso che sia il linguaggio che fa per
me... almeno al momento...

Mi sto studiando un po' di documentazione varia, durante i miei
esperimenti, spero di poter imparare ad usarlo al meglio, con il
vostro aiuto.

eccomi alla prima domanda:

dovendo ricevere un file dallo standard input, come posso sapere la
dimensione finale del file?

mi spiego meglio:

ricevo sullo stdin un file, lo leggo a blocchi con un loop e una read
bufferizzata con un buffer di 1MB al giro.

la soluzione più semplice sarebbe mettere un contatore, a cui aggiungo
ad ogni ciclo la dimensione del buffer, e fin qui, sembra una
banalità. il problema arriva con l'ultimo blocco, anche se io prelevo
dal file con una read da 1MB, i dati che vengono passati saranno
probabilmente meno. La domanda spontanea è: posso in qualche modo
sapere quanto di quel buffer è utilizzato ad ogni ciclo (pieno per
tutti i cicli, una parte all'ultimo)? oppure esiste una alternativa
che (per ignoranza di questo linguaggio) non ho preso in
considerazione?

Mi serve che la soluzione sia utilizzabile sulla versione 2.6.6 di python.


Tnx&Byez
--
Gollum1
Tesoro, dov'é il mio teoro...
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python