Re: [Python] Presentazione nuovo utente e prima domanda.
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.
-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.
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/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.
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.
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.
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/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.
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/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.
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