Hogyan lehet ellenőrizni a fájl- és mappaméretet a Pythonban?

Ebből a cikkből megtudhatja, hogyan ellenőrizheti a fájl vagy mappa méretét a Pythonban

A Python az egyik legsokoldalúbb programozási nyelv. Ezzel egy kis CLI (Command-line interface) programból komplex webalkalmazásokká építhetsz.

Az egyik leginkább alulértékelt tulajdonsága azonban az operációs rendszerekkel való interakció képessége. Az operációs rendszer műveleteinek Python segítségével való kezelése rengeteg időt takaríthat meg az automatizálási folyamatok létrehozásakor.

Nézzük meg, hogyan működik együtt a Python az operációs rendszerrel.

Hogyan működik együtt a Python az operációs rendszerrel?

Senki sem élhet elzárva a környezetétől. Ez a Pythonban is érvényes, ahol néha alapvető fontosságú az operációs rendszerrel való interakció a dolgok elvégzése érdekében.

A Python számos modullal rendelkezik, amelyek lehetővé teszik az operációs rendszerrel való interakciót. A leggyakrabban használt operációs rendszer, sys, pathlib és alfolyamat.

Mivel beépített modulokról van szó, nem kell őket PIP segítségével telepíteni. Mindegyiket importálhatja a következő utasítással:

import os
import sys
import pathlib
import subprocess

Az alábbi lista az egyes importálások fő funkcióit mutatja:

  • Operációs rendszer: Hordozható módja a rendszerspecifikus (az operációs rendszertől függően) funkciók használatának. A legtöbb esetben ez a megfelelő választás, hacsak nincs szüksége valami fejlettebbre
  • Sys: Rendszerspecifikus paraméterek és funkciók. Ez a modul hozzáférést biztosít az értelmező változókhoz és függvényekhez. Az operációs rendszer modul kölcsönhatásba lép az operációs rendszerrel, a sys pedig a Python értelmezővel
  • Pathlib: Speciális útvonalhasználat. Lehetővé teszi a fájlrendszerek objektumként való ábrázolását, az egyes operációs rendszerekhez tartozó szemantikával.
  • Alfolyamat: A végrehajtás és az alfolyamatok kezelése közvetlenül Pythonból. Ez magában foglalja az stdin, stdout és visszatérési kódok használatát. Erről többet tudhat meg Python alfolyamat-útmutatónk elolvasásával.

Vannak olyan magas szintű könyvtárak, amelyek az Ön igényeitől függően még specifikusabb funkciókat tartalmaznak. Legtöbbször azonban jó a fenti modulok használata.

Megjegyzés: Az ezen modulok által biztosított legtöbb funkció az operációs rendszertől függően eltérő kimenettel rendelkezik. Ne feledje, hogy általában a legjobb egyezés az UNIX és Python.

  A Fix Minecraft Launcher jelenleg nem érhető el a fiókjában

Most már gyorsan átlátja, hogyan kommunikál a Python az operációs rendszerrel, ugorjunk bele a fájl- és mappaméret ellenőrzésének módszereibe. Az alábbi megoldások mindegyike elérhető a Fájl- és mappaméret a Pythonban GitHub adattár

Az os.stat().st_size használatával

Ebben a módszerben a statisztika() funkciót az os modulból. Sok információt ad vissza egy adott útvonalról.

Megjegyzés: Az os.path.getsize() függvény is elvégzi a munkát. Az os.stat().st_size használatának az az előnye, hogy nem követi a szimlinkeket.

Mielőtt folytatnánk, hozzunk létre egy lorem.txt nevű tesztfájlt, amelybe beillesztünk néhány buta szöveget. Meglátogathatjuk a Lorem Ipsum szöveggenerátor és illessze be a szöveget a lorem.txt fájlba.

Ugyanabban a könyvtárban hozzon létre egy fájlt method1.py néven, és illessze be az alábbi kódot:

import os
size = os.stat('lorem.txt').st_size
print(size)

Nézzük meg, mit csinálunk ezzel a kóddal:

  • Az első sorban az operációs rendszer modult importáljuk
  • A méret változó a lorem.txt fájl méretét tartalmazza
    • Az os.stat() függvény egy csomó információt ad vissza a fájlhoz kapcsolódóan
    • Az st_size attribútum a fájl méretét jelzi
  • Kinyomtatjuk a méretváltozót

Próbáld meg futtatni a Python szkriptet. A lorem.txt fájl tartalmától függően eltérő eredményt kap.

Kimenet:

20064

A kimenet bájtokban van ábrázolva. Ez egyáltalán nem olvasható, ezért humanizáljuk, hogy jobban átláthassuk a fájl méretét.

Először telepítse a humanizálni csomagot a következő parancs futtatásával a shellben:

pip install humanize

Ezután használhatja a naturalsize() függvényt, amely egy bájtban megadott értéket olvasható fájlméretre konvertál, például KB, MB, GB vagy TB.

import os
from humanize import naturalsize

size = os.stat('lorem.txt').st_size

print(size)
print(naturalsize(size))

A fenti kód először a fájl méretét bájtokban írja ki, majd az eredményt olvasható méretben.

Kimenet:

20064
20.1 kB

Pathlib használatával

Habár pathlib úgy tervezték, hogy kizárólag elérési utakkal működjön, néhány hasznos funkciót tartalmaz más modulokból, mint Path objektumok metódusait (A Path osztály példányai).

Hozzon létre egy method2.py fájlt, és importálja a Út osztály.

from pathlib import Path

Ezután hozzon létre egy Path objektumot, amely argumentumként adja át a lorem.txt fájl elérési útját.

file_ = Path('lorem.txt')

Most már elérheti a Path osztály stat() metódusát. Ugyanúgy működik, mint az os.stat() függvény, ezért ki tudod nyomtatni a fájl méretét.

print(file_.stat().st_size)

Kimenet:

20064

Mint látható, ugyanazt az eredményt kaptuk, mint az első módszerrel. A fenti eredményt is bájt formátumban nyomtatjuk ki, így a humanize modul segítségével tudjuk olvashatóvá tenni.

from pathlib import Path
from humanize import naturalsize

size = Path('lorem.txt').stat().st_size

print(naturalsize(size))

Ez a kód a következő kimenetet állítja elő:

20.1 kB

Unix parancsok használata alfolyamatokkal:

Az alfolyamat modul lehetővé teszi részfolyamatok hívását és kezelését Pythonból. Ezért bármilyen parancsot futtathatunk, és a kimenetét közvetlenül a Pythonban kezelhetjük.

  Google Meet videokonferencia indítása

Megjegyzés: Ez a módszer csak akkor működik, ha Unix operációs rendszert (Linux, Mac) használ.

Nyisson meg egy method3.py fájlt, és illessze be az alábbi kódot:

from subprocess import run

process = run(['du', 'lorem.txt'], capture_output=True, text=True)

print(process.stdout)

Búvárkodás ebbe a kódrészletbe:

  • Importáljuk a futtatás funkció az alfolyamat modulból
  • A változó folyamat tartalmazza a du lorem.txt parancs futtatásának eredményét
    • A du egy Linux segédprogram, amely lehetővé teszi egy fájl lemezterületének lekérését
    • A capture_output hozzáférést biztosít a standout (standard output) attribútumhoz
    • A szöveg azt jelenti, hogy a kimenetet bájtok helyett karakterláncként tároljuk
  • Kinyomtatjuk a folyamat szabványos kimenetét

Ha a fenti kódot futtatja, a következő kimenetet kapja:

20      lorem.txt

Amint látja, megadja nekünk a fájl méretét és nevét. Ha csak a fájl méretét szeretné megkapni, fel kell osztania a kimenetet (ne feledje, hogy ez egy karakterlánc), és ki kell nyomtatnia az első elemet.

from subprocess import run

process = run(['du', 'lorem.txt'], capture_output=True, text=True)

size = process.stdout.split()[0]

print(size)

Kimenet:

20

Ez a kimenet egyáltalán nem olvasható. Ebből arra következtethetünk, hogy a használt mértékegység KB (az előző módszerek miatt), de senki más nem tudta megtippelni a fájl méretét.

A probléma megoldására használhatjuk a -h (ember által olvasható) jelzőt.

Megjegyzés: A parancs kézikönyvét a man du vagy a du –help futtatásával kaphatja meg.

from subprocess import run

process = run(['du', '-h', 'lorem.txt'], capture_output=True, text=True)

size = process.stdout.split()[0]

print(size)

Most ennek a szkriptnek a kimenete sokkal olvashatóbb lesz:

20K

Ha többet szeretne tudni az alfolyamat modulról és a lehetséges alkalmazásokról, tekintse meg Python alfolyamat-útmutatónkat.

Szerezze meg rekurzívan a mappa méretét

Ha egy mappa méretét szeretné elérni, át kell ismételnie a könyvtárban és annak alkönyvtáraiban található összes fájlt. Két módszerrel fogjuk megtenni:

  • Iterálás egy útvonalon keresztül pathlib-el
  • A du parancs használata alfolyamattal
  Hogyan lehet megakadályozni, hogy az iPhone widgetek automatikusan megváltozzanak

A következő kód a saját mappámban található tesztkönyvtár elérési útját fogja használni. Cserélnie kell a fájl elérési útját abban a könyvtárban, amelynek méretet szeretné elérni.

Iterálás egy útvonalon keresztül pathlib-el

Nézzük meg, hogyan szerezheti meg egy könyvtár méretét a fájlok méretének iterációjával.

from pathlib import Path
from humanize import naturalsize

def get_size(path="."):
    size = 0

    for file_ in Path(path).rglob('*'):

        size += file_.stat().st_size
    
    return naturalsize(size)

test_path = Path.home() / 'Documents/tests/'

print(get_size(test_path))

Ez a kódrészlet kissé ijesztőnek tűnik, bontsuk ki, mit csinálnak az egyes részek.

  • Importálja a Path osztályt és a naturalsize() függvényt
  • Határozza meg a get_size() függvényt egy paraméterúttal, amely alapértelmezés szerint az aktuális könyvtárra mutat.
  • A méretváltozó csak egy helyőrző, amelybe hozzáadjuk az egyes fájlok méretét
  • Iteráljon az elérési út minden fájlja felett
  • Szerezze meg az egyes fájlok méretét, és adja hozzá a méretváltozóhoz
  • Ember által olvasható módon adja vissza a méretváltozót

Természetesen a funkciót egy csak a gépemen elérhető könyvtárral tesztelem. Ne felejtse el megváltoztatni a számítógépén található mappa elérési útját.

Az én esetemben a következő kimenetet kapom:

403.4 MB

A du Command használata az alfolyamatokkal

Ennek a megközelítésnek van néhány előnye:

  • Az eredmény egy kicsit pontosabb
  • Sokkal gyorsabb
from subprocess import run
from pathlib import Path

test_path = Path.home() / 'Documents/tests/'

process = run(['du', '-sh', test_path], capture_output=True, text=True)

size = process.stdout.split()[0]

print(size)

Ugyanazt a megközelítést alkalmazzuk, mint a 3. módszernél, de ezúttal egy könyvtár méretét kapjuk a fájl helyett.

Kimenet:

481M

Amint láthatja, ez a két módszer a mappa méretének meghatározására kissé eltérő eredményt ad vissza. Minél nagyobb a könyvtár, annál nagyobb a különbség.

Rajtad múlik, hogy válassz a pathlib vagy az alfolyamat megközelítések között. Ha tudja, hogy minden alfolyamat használatakor Linuxot fog használni, akkor használhatja a pathlib megoldást.

Összefoglalva

A Python eredmények rendkívül hasznosak az operációs rendszerrel való interakció során. A Python segítségével automatizálhatja a folyamatokat, és sok időt takaríthat meg. Az operációs rendszerrel együttműködő fő modulok az os, a sys, az elérési út és az alfolyamat.

Ebben az oktatóanyagban megtanultad:

  • Hogyan kommunikál a Python az operációs rendszerrel
  • Beépített modulok használata az operációs rendszer műveleteihez
  • A humanize modul használata ember által olvasható nyomtatáshoz
  • Egy fájl méretének kiszámítása 3 megközelítéssel
  • Egy könyvtár méretének kiszámítása rekurzívan vagy a du paranccsal