Portál AbcLinuxu, 12. května 2025 03:07

Dotaz: python / du -hs

9.4.2006 16:58 michal74
python / du -hs
Přečteno: 96×
Odpovědět | Admin
Potřeboval bych poradit. Nevím jak v pythonu zjistit velikost obsazeného prostoru. Mělo by to fungovat jako v bashi příkaz du -hs /adresář.Výsledek bych chtěl přiřadit do proměnné.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.4.2006 17:23 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: python / du -hs
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vzhledem k tomu, že chceš výsledek přiřadit do proměnné, tak by tam asi neměl být ten parametr "-h". Ta funkce by se dala napsat třeba takhle:
def getdirsize(base):
  size = 0
  for root, dirs, files in os.walk(base):
    for file in files:
      filepath = os.path.join(root, file)
      if os.path.islink(filepath): continue
      size = size + os.path.getsize(filepath)
  return size
Ale je to jen jednoduchá varianta, která za adresáře a linky nic nepřipočítává.
9.4.2006 17:45 michal74
Rozbalit Rozbalit vše Re: python / du -hs
V pythonu sem začátečník ,takže tomu cos napsal moc nerozumím, ale určitě to vyzkouším. Parametr -h tam v podstatě nepotřebuju. Díky
10.4.2006 09:33 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: python / du -hs
Zjišťování velikosti adresáře jsem nechtěl hned dělat "human readable". Na tohle bude lepší udělat zvláštní funkci. Zkusil jsem to napsat takhle:
def human_readable(x, suffix = '', binary = True):
  prefixes_dec = ['', 'k', 'M', 'G', 'T', 'P']
  prefixes_bi  = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi']

  if binary:
    base = 1024
    prefixes = prefixes_bi
  else:
    base = 1000
    prefixes = prefixes_dec

  mul = base/999.5
  mag = int(math.log(x * mul, base))
  prefix = prefixes[mag]
  not_rounded = float(x) / base**mag
  r_order = 10**(2 - int(math.log(not_rounded, 10)))
  rounded = math.ceil(not_rounded * r_order - 0.5) / r_order
  
  return '%g %s%s' %(rounded, prefix, suffix)
Parametrem "binary" (který je True nebo False) rozlišuje decimální a binární předpony. Ty jsou sice na můj vkus trochu nezvyklé, ale co se dá dělat - viz: http://physics.nist.gov/cuu/Units/binary.html
Program vypisuje hodnoty zaokrouhlené na tři platná (nikoli desetinná) místa. Příklad použití:
    print human_readable(648218, 'Hz', binary=False)
    print human_readable(187, 'bit/s', binary=True)
A teď mi někdo řekněte, jak by měla vypadat "human readable" 1001 bitů. Je to už čtyřmístné, ale když se to převede na Ki bity, tak se to scvrkne na 0.98. Blbé, co?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.