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

Ilekroć jest to uruchomione, otrzymuję wynik {'example.py':392L}, dlaczego? Co to jest L? Nie chcę na koniec zdejmować L-a.os.path.getsize zgłasza plik z literą L na końcu, dlaczego?

Jeśli uruchomię go bez dodawania go do słownika, wróci z plikiem rozmiar jako 392.

+2

Prawdopodobnie zwraca rozmiar pliku jako długi. – xbonez

+0

@xbonez - dodaj jako odpowiedź - może z krótkim wyjaśnieniem, czym * długa * faktycznie * jest *. – mgilson

+0

@Matthew - Po prostu ciekawy, na czym polega system operacyjny? – mgilson

Odpowiedz

8

Jest wyświetlany tylko w trybie interaktywnym lub po uzyskaniu reprezentacji ciągów przez repr(). Jak napisał Zigg, możesz go po prostu zignorować. Rozważ to szczegóły implementacji. Prawdopodobnie było to przydatne w czasie, gdy ważne było, aby odróżnić normalne int i długie int. W Pythonie 3 nie ma na przykład L. Int int nieważne jak duży:

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 
>>> 

Zawiadomienie L przez Python 2.7, ale nic podobnego przez Python 3.2.

+0

Ah, rozumiem. To ma sens. Jako początkujący powinienem uczyć się Py3 lub kontynuować z 2.7? – Matthew

+0

To nie ma znaczenia. Ważne rzeczy są takie same. Proponuję jednak wypróbować oba, jeśli to możliwe. Domyślam się, że Python 3 wkrótce wygrywa. Zobacz http://getpython3.com/diveintopython3/strings.html. Struny są jedną z najbardziej widocznych różnic. Python 3 jest bardziej logiczny, Python 2.6 jest bardziej używany w dzisiejszych czasach. Python 2.7 znajduje się pośrodku. – pepr

7

Końcowy L oznacza, że ​​masz long. W rzeczywistości zawsze masz go, ale print będzie wyświetlać reprezentacje wartości, w tym notację L; jednak samo drukowanie samego long pokazuje tylko liczbę.

Niemal na pewno nie musisz się martwić, że zdejmiesz z niego końcową koszulkę L; możesz użyć wartości long we wszystkich swoich obliczeniach, tak jak przy korzystaniu z int.

+1

Moja +1, ponieważ nie byłoby to w porządku :) – pepr

0

To prawdziwa odpowiedź na PEPR, ale jeśli naprawdę potrzeba można zrobić int() Funkcja, działa również na dużych liczb całkowitych

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 

ale jeśli umieścić w int function() Automagicznie:

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