Python: Python: Tiedostojen listaaminen hakemistossa - Nykyaikaisen kehityksen opas

17. kesäkuuta 2025

Ohjelmistokehityksessä tehokkaat tiedostojärjestelmän toiminnot ovat perustavanlaatuisia vakaiden sovellusten rakentamisessa. Kehititpä sitten tietojenkäsittelyputkea, sisällönhallintajärjestelmää tai pilvipohjaista ratkaisua, kyky luetella tiedostoja hakemistossa on perustavanlaatuinen tehtävä. Python tarjoaa yksinkertaisuudessaan ja monipuolisuudessaan tehokkaita työkaluja tällaisten toimintojen saumattomaan käsittelyyn. Tässä oppaassa tutustumme siihen, miten hakemistossa olevia tiedostoja voidaan luetella Pythonilla, ja syvennymme erilaisiin menetelmiin, parhaisiin käytäntöihin ja käytännön sovelluksiin. Carmatec on johtava huippuluokan tietotekniikkaratkaisujen toimittaja, joka hyödyntää Pythonin ominaisuuksia antaakseen yrityksille skaalautuvia ja tehokkaita ohjelmistoja. Sukelletaan mukaan!

Johdatus tiedostojärjestelmän operaatioihin Pythonissa

Python on tunnettu helppokäyttöisyydestään ja laajasta standardikirjastostaan, minkä vuoksi se on suosittu kieli kehittäjille eri toimialoilla. Tiedostojärjestelmän toiminnot, kuten tiedostojen luettelointi hakemistossa, ovat kriittisiä esimerkiksi tiedon syöttämisessä, tiedostojen hallinnassa ja automatisoinnissa. Python tarjoaa useita moduuleja tiedostojärjestelmän kanssa toimimiseen, kuten os, pathlib ja glob. Kukin moduuli tarjoaa ainutlaatuisia etuja, jotka sopivat erilaisiin käyttötapauksiin ja kehittäjien mieltymyksiin.

Me Carmatecilla ymmärrämme, miten tärkeää on valita oikeat työkalut työhön. Asiantuntemuksemme Python-kehitys ansiosta voimme rakentaa ratkaisuja, jotka optimoivat suorituskyvyn, skaalautuvuuden ja ylläpidettävyyden. Tässä artikkelissa käsittelemme:

  • Eri menetelmiä tiedostojen luetteloimiseksi hakemistossa
  • Käytännön koodiesimerkkejä selityksineen
  • Virheiden käsittely ja parhaat käytännöt
  • Edistyneet tekniikat tiedostojen suodattamiseen ja lajitteluun
  • Carmatecin asiakaskunnan kannalta merkitykselliset reaalimaailman sovellukset.
  • Suorituskykyyn liittyvät näkökohdat laajamittaisissa järjestelmissä

Loppupuolella sinulla on perusteellinen käsitys siitä, miten tiedostoja luetellaan Pythonilla ja miten näitä tekniikoita voidaan soveltaa ammattimaisessa ohjelmistokehityksessä.

Menetelmä 1: Käyttämällä os Moduuli

The os moduuli on Pythonin perinteinen tapa toimia vuorovaikutuksessa käyttöjärjestelmän kanssa. Se tarjoaa toimintoja kuten os.listdir(), os.walk(), ja os.scandir() luetella tiedostoja ja hakemistoja.

Käyttämällä os.listdir()

The os.listdir() palauttaa luettelon kaikista tietueista (tiedostoista ja hakemistoista) määritetyssä hakemistossa. Tässä on yksinkertainen esimerkki:

python
import os

# Määritä hakemistopolku
directory = "C:/Users/Documents"

# Luettele kaikki hakemiston merkinnät.
entries = os.listdir(directory)

# Tulosta merkinnät
for entry in entries:
print(entry)

Lähtö (esimerkki):

document1.txt
kuva.jpg
alikansio

Selitys:

  • os.listdir(hakemisto) palauttaa listan merkkijonoja, jotka edustavat tiedostojen ja hakemistojen nimiä.
  • Toiminto ei tee eroa tiedostojen ja hakemistojen välillä, joten lisätarkistuksia tarvitaan, jos haluat listata vain tiedostoja.

Jos haluat luetella vain tiedostoja, voit yhdistää os.listdir() kanssa os.path.isfile():

python
import os

hakemisto = "C:/Käyttäjät/Dokumentit"

# Listaa vain tiedostot
tiedostot = [entry for entry in os.listdir(directory) if os.path.isfile(os.path.join(directory, entry))]

for file in files:
print(file)

Lähtö (esimerkki):

document1.txt
kuva.jpg

Tärkeimmät kohdat:

  • Käytä os.path.join() luoda alustariippumattomia tiedostopolkuja.
  • os.listdir() on yksinkertainen, mutta rajoitettu monimutkaisille tiedostojärjestelmän läpikäynneille.
Käyttämällä os.scandir()

Otettiin käyttöön Python 3.5:ssä, os.scandir() on tehokkaampi kuin os.listdir() koska se palauttaa iteraattorin DirEntry objekteja, jotka tarjoavat metatietoja, kuten tiedoston tyypin ja koon, ilman ylimääräisiä järjestelmäkutsuja.

python
import os

hakemisto = "C:/Käyttäjät/Dokumentit"

# Käytä scandiria tiedostojen listaamiseen
kanssa os.scandir(directory) as entries:
    for entry in entries:
        Jos entry.is_file():
            print(f "Tiedosto: {entry.name}, Koko: {entry.stat().st_size} tavua")

Lähtö (esimerkki):

Tiedosto: document1.txt, Koko: 1024 tavua
Tiedosto: photo.jpg, Koko: 52428 tavua

Edut:

  • os.scandir() on muistitehokas suurille hakemistoille.
  • DirEntry objektit tarjoavat suoran pääsyn tiedoston metatietoihin (esim., is_file(), stat()).

Menetelmä 2: Käyttämällä pathlib Moduuli

The pathlib moduuli, joka otettiin käyttöön Python 3.4:ssä, tarjoaa oliopohjaisen lähestymistavan tiedostojärjestelmän toimintoihin. Se on nykyaikainen, intuitiivinen ja alustariippumaton, joten se on monien kehittäjien suosima valinta.

Listing Files with pathlib

Näin luetellaan tiedostoja käyttämällä pathlib:

python
from pathlib import Path

# Määritä hakemistopolku
directory = Path("C:/Users/Documents")

# Luettele kaikki hakemistossa olevat tiedostot.
tiedostot = [entry.name for entry in directory.iterdir() if entry.is_file()]

for file in files:
    print(file)

Lähtö (esimerkki):

document1.txt
kuva.jpg

Selitys:

  • Polku(hakemisto) luo Polku objekti, joka edustaa hakemistoa.
  • iterdir() tuottaa Polku objektit jokaiselle hakemiston merkinnälle.
  • is_file() tarkistaa, onko merkintä tiedosto.
Rekursiivinen listaus pathlib

Jos haluat listata hakemistossa ja sen alihakemistoissa olevat tiedostot, käytä komentoa glob() tai rglob():

python
from pathlib import Path

directory = Path("C:/Users/Documents")

# Luettele kaikki tekstitiedostot rekursiivisesti.
text_files = directory.rglob("*.txt")

for file in text_files:
    print(file)

Lähtö (esimerkki):

C:\Users\Documents\document1.txt
C:\\Users\Documents\subfolder\notes.txt

Edut:

  • pathlib on helpommin luettavissa ja se poistaa tarpeen os.path.join().
  • Se tukee kuvioiden täsmäytystä glob() ja rglob().

Menetelmä 3: Käyttämällä glob Moduuli

The glob moduuli on suunniteltu kuvioihin perustuvaa tiedostojen täsmäytystä varten. Se on ihanteellinen tiedostojen suodattamiseen tiedostopäätteiden tai nimikuvioiden perusteella.

Peruskäyttö glob
python
import glob

# Luettele kaikki tekstitiedostot hakemistossa
text_files = glob.glob("C:/Users/Documents/*.txt")

for file in text_files:
    print(file)

Lähtö (esimerkki):

C:\Users\Documents\document1.txt

Rekursiivinen haku glob

Jos haluat etsiä rekursiivisesti, käytä ** kanssa recursive=True:

python
import glob

# Luettele kaikki tekstitiedostot rekursiivisesti
text_files = glob.glob("C:/Users/Documents/**/*.txt", recursive=True)

for file in text_files:
    print(file)

Lähtö (esimerkki):

C:\Users\Documents\document1.txt
C:\\Users\Documents\subfolder\notes.txt

Edut:

  • glob on erinomainen tiedostojen suodattamiseen kuvioiden perusteella (esim. glob on erinomainen tiedostojen suodattamiseen kuvioiden perusteella (esim., *.txt, *.jpg).
  • Se on yksinkertainen ja integroituu hyvin muuhun Python-koodiin.

Virheiden käsittely ja parhaat käytännöt

Tiedostoja listattaessa voi esiintyä virheitä, kuten puuttuvia hakemistoja tai käyttöoikeusongelmia. Asianmukainen virheenkäsittely takaa vankan koodin.

Esimerkki virheiden käsittelystä
python
from pathlib import Path

def list_files(directory_path):
    try:
        hakemisto = Path(directory_path)
        if not directory.exists():
             ei ole olemassa.")
             return
        if not directory.is_dir():
            print(f 'Virhe: '{hakemisto_polku}" ei ole hakemisto.")
            return
        for entry in directory.iterdir():
            if entry.is_file():
                print(f 'Tiedosto: {merkintä.nimi}')
    paitsi PermissionError:
        ") print(f "Virhe: Permission denied for "{hakemisto_polku}".')
    except Exception as e:
        print(f 'Odottamaton virhe: {str(e)}")

# Testaa funktio
list_files("C:/Käyttäjät/Dokumentit")
list_files("C:/Väärennetty/hakemisto")

Lähtö (esimerkki):

Tiedosto: document1.txt
Tiedosto: photo.jpg
Virhe: Hakemistoa ‘C:\Invalid\Directory’ ei ole olemassa.

Parhaat käytännöt:

  • Validoi syötteet: Tarkista, onko hakemisto olemassa ja onko siihen pääsy.
  • Käytä kontekstinhallintaa: Käytä kanssa varten os.scandir() resurssien vapauttamisen varmistamiseksi.
  • Käsittele poikkeuksia: Pyydystää erityiset virheet, kuten PermissionError tai FileNotFoundError.
  • Käytä pathlib Modernin koodin osalta: Se on luettavampi ja kannettavampi.
  • Lokivirheet: Tuotannossa kirjaa virheet tiedostoon tai seurantajärjestelmään.

Edistyneet tekniikat

Tiedostojen suodattaminen koon tai muutosajan mukaan

Jos haluat suodattaa tiedostoja metatietojen perusteella, käytä seuraavaa tapaa os tai pathlib:

python
from pathlib import Path
from datetime import datetime, timedelta

directory = Path("C:/Users/Documents")
one_week_ago = datetime.now() - timedelta(days=7)

# Luettelo viimeisen viikon aikana muutetuista tiedostoista
recent_files = [
    entry.name for entry in directory.iterdir()
    if entry.is_file() ja datetime.fromtimestamp(entry.stat().st_mtime) > one_week_ago
]

for file in recent_files:
    print(file)
Tiedostojen lajittelu

Lajittele tiedostot nimen, koon tai muutosajan mukaan:

python
from pathlib import Path

directory = Path("C:/Users/Documents")

# Lajittele tiedostot koon mukaan (suurin ensin)
files = sorted(
    [entry for entry in directory.iterdir() if entry.is_file()],
    key=lambda x: x.stat().st_size,
    reverse=True
)

for file in files:
    print(f "Tiedosto: {tiedoston.nimi}, Koko: {tiedoston.stat().st_size} tavua")

Todellisen maailman sovellukset Carmatecilla

Carmatecilla hyödynnämme Pythonin tiedostojärjestelmäominaisuuksia rakentaessamme ratkaisuja eri toimialoille. Tässä muutamia esimerkkejä:

  • Tietojenkäsittelyputket: Tiedostojen luettelointi hakemistoon on kriittinen tekijä, kun datakokonaisuuksia syötetään koneoppimis- tai analyysihankkeisiin. Pythonin glob moduuli auttaa suodattamaan asiaankuuluvia tiedostoja (esim. CSV tai JSON).
  • Sisällönhallintajärjestelmät: CMS-ratkaisumme käyttävät tiedostoluettelointia mediavarantojen hallintaan, mikä takaa tehokkaan haun ja organisoinnin.
  • Automaatioskriptit: Kehitämme skriptejä, jotka valvovat hakemistoja uusien tiedostojen varalta ja käynnistävät työnkulkuja, kuten varmuuskopioita tai ilmoituksia.
  • Pilvi-integraatio: Pilvipohjaisissa sovelluksissa luetteloimme tiedostoja tallennussäiliöihin (esim. AWS S3) Python SDK:n avulla, jolloin hakemistoluettelointilogiikka mukautuu hajautettuihin järjestelmiin.

Yhdistämällä Pythonin tiedostojärjestelmätyökalut ja asiantuntemuksemme pilvipalvelun, tekoälyn ja verkkokehityksen aloilla Carmatec tarjoaa ratkaisuja, jotka tuottavat liiketoiminta-arvoa.

Suorituskykyyn liittyvät näkökohdat

Kun luetellaan tiedostoja suurissa hakemistoissa (esim. tuhansia tiedostoja), suorituskyvyllä on merkitystä. Näin voit optimoida:

  • Käytä os.scandir(): Se on nopeampi kuin os.listdir() suurille hakemistoille.
  • Vältä tarpeetonta metatietoa: Hae vain tarvittavat tiedostoattribuutit (esim. nimi) järjestelmäkutsujen vähentämiseksi.
  • Käytä generaattoreita: Menetelmät kuten pathlib.iterdir() ja os.scandir() tuottaa merkintöjä laiskasti ja säästää muistia.
  • Rinnakkaistaminen suuria hakemistoja varten: Massiivisia hakemistoja varten käytä moniprosessointi rinnakkaistamaan tiedostojen luettelointia (varoen I/O-pulmien välttämiseksi).

Esimerkki rinnakkaistiedostoluettelosta:

python
from pathlib import Path
from multiprocessing import Pool

def process_file(entry):
    Jos entry.is_file():
        return entry.name
    return None

directory = Path("C:/Käyttäjät/Dokumentit"))
tiedostot = directory.iterdir()

with Pool() as pool:
    file_names = [name for name in pool.map(process_file, files) if name]

for file in file_names:
    print(file)

Johtopäätös

Tiedostojen luettelointi hakemistossa on petollisen yksinkertainen tehtävä, joka on monien monimutkaisten sovellusten perustana. Pythonin os, pathlib, ja glob moduulit tarjoavat joustavia ja tehokkaita työkaluja tämän tehtävän tehokkaaseen hoitamiseen. Noudattamalla parhaita käytäntöjä, kuten virheenkäsittelyä, käyttämällä nykyaikaisia sovellusrajapintoja, kuten pathlib, ja optimoimalla suorituskykyä, kehittäjät voivat rakentaa vankkoja tiedostojärjestelmän toimintoja.

klo Carmatec, valjastamme Pythonin ominaisuudet innovatiivisten ja innovatiivisten ohjelmistoratkaisut räätälöidään asiakkaidemme tarpeiden mukaan. Olipa kyse sitten tiedostojen käsittelyn automatisoinnista, dataputkien rakentamisesta tai pilvipohjaiset sovellukset, asiantuntemuksemme takaa laadukkaat ja skaalautuvat tulokset. Jos haluat hyödyntää Pythonia seuraavassa projektissasi, ota yhteyttä Carmateciin tänään, jotta voimme tutkia, miten voimme muuttaa visiosi todellisuudeksi.