Pythoniga failinimede hankimine – os ja pathlib selgitus

1. Sissejuhatus

Python on failide käsitlemisel väga paindlik ning lihtsa koodiga saab automatiseerida palju ülesandeid. Selles artiklis tutvustame mõningaid viise, kuidas Pythoniga „failinime hankida“ meetodit. Eelkõige keskendume standardraamatukogudele os moodulile ja pathlib moodulile. Selle artikli lugemisega õpid, kuidas tõhusalt manipuleerida kataloogi failidega, ning kuidas luua skripte, mis hangivad ja filtreerivad failinimesid.

2. Pythoni failinime hankimise põhitõed

Alustame Pythoni failinime hankimise põhilistest meetoditest. os.path.basename() funktsiooni kasutades, saate määratud teelt failinime kätte.

2.1 os.path.basename() kasutamine

os.path.basename() on funktsioon, mis võtab täisteelt ainult failinime. Järgnevas näites eraldatakse failinimi failiteelt.
import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # Tulemus: "file.txt"

2.2 os.path.dirname() abil kataloogi nime hankimine

Samamoodi, kasutades os.path.dirname(), saate failiteelt kataloogi nime kätte. Sellega on võimalik eraldada failinimi ja kataloogi nimi.
dir_name = os.path.dirname(file_path)
print(dir_name)  # Tulemus: "/user/home/document"
侍エンジニア塾

3. Kogu failinime hankimine kataloogist

Kataloogis olevate kõigi failide ja kaustade loetlemiseks on os.listdir() mugav. Lisaks on os.walk() kasulik, et hankida alamkataloogide failid rekursiivselt.

3.1 os.listdir() abil failinime hankimine

os.listdir() kasutades saab määratud kataloogis olevad kõik failid ja kaustad loetelu kujul hankida. See sobib ideaalselt lihtsate kataloogitoimingute jaoks.
import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # Tulemus: ["file1.txt", "file2.txt", "subfolder"]

3.2 os.walk() abil rekursiivne failinime hankimine

Kui soovid hankida failid rekursiivselt, kaasa arvatud alamkataloogid, on os.walk() kasutamine kõige tõhusam. Allolevas koodis kuvatakse loetelu kõigist failidest, mis asuvad määratud kataloogis ja selle alamkataloogides.
import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3. Vea töötlemiseamine

Võib tekkida vigu, kui kataloog ei eksisteeri või puuduvad juurdepääsuõigused. Seetõttu soovitatakse kasutada try-except plokki, et lisada erindite töötlemine.
dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"{dir_path} ei leitud.")

4. Laiendi hankimine ja muutmine

Failinime hankimisel võib osutuda vajalikuks ka laiendi töötlemine。os.path.splitext() kasutades on võimalik laiendi eraldada või muuta。

4.1 os.path.splitext() laiendi hankimine

os.path.splitext() on funktsioon, mis tagastab failinime ja laiendi eraldatult。
import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # tulemus: "/user/home/document/file"
print(file_ext)   # tulemus: ".txt"

4.2 Laiendi muutmine

Laiendi muutmisel lisatakse failinimele, mis on saadud os.path.splitext() abil, uus laiend。
new_file_path = file_name + ".jpg"
print(new_file_path)  # tulemus: "/user/home/document/file.jpg"
年収訴求

5. pathlib mooduli rakendused failinimede hankimisel

Alates Python 3.4-st on pathlib moodul failiteedade käsitlemisel väga kasulik. pathlib võimaldab failiteedadega objektorienteeritud viisil töötada, muutes selle kasutamise intuitiivsemaks.

5.1 Path.iterdir() kasutamine failinimede hankimiseks

pathlib.Path() meetodi iterdir() kasutamisel saab määratud kataloogi failide ja kaustade nimed hankida.
from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 Rekursiivne failide hankimine: rglob()

Kui soovite hankida failinimed rekursiivselt, kaasa arvatud alamkataloogid, kasutage meetodit rglob(). seda saab kasutada ka os.walk() alternatiivina.
for file in dir_path.rglob("*"):
    print(file)

6. Failinimede filtreerimine

Kui soovite hankida ainult failinimed, mis vastavad kindlatele tingimustele, saate filtreerida kasutades glob moodulit või pathlib klassi glob() meetodit.

6.1 Filtreerimine laiendi alusel

Kindla laiendiga failide hankimiseks kasutage metamärki *.
from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)
See kood hangib ainult .txt failid määratud kataloogist.

7. Kokkuvõte

Pythoniga failinime hankimise meetodeid on palju, kuid on oluline valida sobiv lähenemine vastavalt kasutusotstarbele. os mooduli põhilistest toimingutest kuni pathlib täiustatud funktsioonideni, kui neid kombineerida, saab kaustas olevaid faile tõhusalt töödelda. Järgmine kord pakume teavet failide ümbernimetamise, liigutamise ja kustutamise kohta failitoimingute rakenduste osas.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール