2012-09-25 17 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('.')) 

Cuando esto se ejecuta, obtengo la salida de {'example.py':392L}, ¿por qué? ¿Qué es una L? No quiero tener que quitarle la L al final.os.path.getsize informa un tamaño de archivo con una L al final, ¿por qué?

Si lo ejecuto sin agregarlo a un diccionario, vuelve con el tamaño de archivo como 392.

+2

Probablemente el tamaño del archivo sea demasiado largo. – xbonez

+0

@xbonez: publícalo como una respuesta, tal vez con una explicación rápida de lo que * long * en realidad * es *. – mgilson

+0

@Matthew - Simplemente curioso, ¿en qué sistema operativo está esto? – mgilson

Respuesta

8

Esto solo se muestra o en modo interactivo o cuando obtiene la representación de cadena a través del repr(). Como escribió zigg, simplemente puede ignorarlo. Considere esto como un detalle de implementación. Probablemente fue útil en el tiempo cuando era importante hacer una diferencia entre int normal y int largo. En Python 3, no hay L, por ejemplo. El int es int no importa lo 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 
>>> 

Aviso del L por Python 2.7, pero nada similar por parte de Python 3.2.

+0

Ah, ya veo. Eso tiene perfecto sentido. Como principiante, ¿debería aprender Py3 o continuar con 2.7? – Matthew

+0

No importa mucho. Las cosas importantes son lo mismo. Sin embargo, sugiero probar ambos si es posible. Creo que Python 3 gana pronto. Eche un vistazo a http://getpython3.com/diveintopython3/strings.html. Las cuerdas son una de las diferencias más visibles. Python 3 es más lógico, Python 2.6 es más utilizado en estos días. Python 2.7 está en el medio. – pepr

7

El trailing L significa que usted tiene un long. En realidad siempre lo tiene, pero print ing dict mostrará las representaciones imprimibles de los valores, incluida la notación L; sin embargo, al imprimir un long solo se muestra el número.

Es casi seguro que no necesita preocuparse por despojarse de los últimos L; puede usar un long en todos sus cálculos al igual que usaría un int.

+1

Mi +1 ya que no sería justo :) – pepr

0

Es cierto respuesta del PEPR pero si usted necesita realmente que puede hacer la función Int(), funciona también en grandes números enteros

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 

pero si pones en la función int() automáticamente:

>>> int(os.path.getsize('File3')) 
4099 
Cuestiones relacionadas