2012-09-25 14 views
5
import os, sys 

def crawlLocalDirectories(directoryToCrawl): 
    crawledDirectory = [os.path.join(path, subname) for path, dirnames, filenames in os.walk(directoryToCrawl) for subname in dirnames + filenames] 
    return crawledDirectory 

print crawlLocalDirectories('.') 

dictionarySize = {} 
def getSizeOfFiles(filesToMeasure): 
    for everyFile in filesToMeasure: 
     size = os.path.getsize(everyFile) 
     dictionarySize[everyFile] = size 
    return dictionarySize 

print getSizeOfFiles(crawlLocalDirectories('.')) 

Ogni volta che viene eseguito, ottengo l'output di {'example.py':392L}, perché? Cos'è una L? Non voglio dover togliere la L alla fine.os.path.getsize riporta un file con una L alla fine, perché?

Se lo eseguo senza aggiungerlo a un dizionario, torna con il file come 392.

+2

Probabilmente sta restituendo le dimensioni del file come lunghe. – xbonez

+0

@xbonez - postalo come risposta - magari con una rapida spiegazione di cosa sia * long * effettivamente * è *. – mgilson

+0

@Matthew - Solo curioso, su quale sistema operativo è attivo? – mgilson

risposta

8

Questo è visualizzato solo o in modalità interattiva o quando si ottiene la rappresentazione di stringa tramite repr(). Come ha scritto zigg, puoi semplicemente ignorarlo. Considera questo un dettaglio di implementazione. Probabilmente è stato utile nel tempo in cui era importante fare la differenza tra int normale e int lungo. In Python 3, ad esempio, non è disponibile lo L. L'int è int non importa quanto grande:

d:\>py 
Python 3.2.1 (default, Jul 10 2011, 20:02:51) [MSC v.1500 64 bit (AMD64)] on win 
32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = 100000000000000000000000000000000000000000000 
>>> a 
100000000000000000000000000000000000000000000 
>>> ^Z 

d:\>python 
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win 
32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = 100000000000000000000000000000000000000000000 
>>> a 
100000000000000000000000000000000000000000000L 
>>> 

Avviso del L da Python 2.7, ma nulla di simile da Python 3.2.

+0

Ah, capisco. Questo ha perfettamente senso. Come principiante, dovrei imparare Py3 o continuare con 2.7? – Matthew

+0

Non importa così tanto. Le cose importanti sono le stesse. Tuttavia, suggerirei di provare entrambi, se possibile. La mia ipotesi è che Python 3 vince presto. Dai un'occhiata a http://getpython3.com/diveintopython3/strings.html. Le stringhe sono una delle differenze più visibili. Python 3 è più logico, Python 2.6 è più utilizzato in questi giorni. Python 2.7 è nel mezzo. – pepr

7

Il trailing L significa che si dispone di un long. Lo hai sempre, ma print in un dict mostrerà rappresentazioni stampabili dei valori, tra cui la notazione L; tuttavia, la stampa di uno long stesso mostra solo il numero.

Quasi certamente non è necessario preoccuparsi di rimuovere il trailing L; è possibile utilizzare uno long in tutti i calcoli proprio come si utilizza uno int.

+1

Il mio +1 come non sarebbe giusto :) – pepr

0

E' vero la risposta del PEPR ma se avete davvero bisogno che si può fare la funzione INT(), funziona anche su grandi numeri interi

Python 2.7.3 (default, Jul 24 2012, 10:05:39) 
[GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2 
>>> import os 
>>> os.path.getsize('File3') 
4099L 

Ma se si mette in funzione int() automagicamente:

>>> int(os.path.getsize('File3')) 
4099 
Problemi correlati