Last modified: June 14, 2024

This article is written in: 馃嚨馃嚤

Praca z plikami i folderami

Biblioteka standardowa Pythona oferuje szereg funkcji i narz臋dzi do efektywnej pracy z plikami i folderami. Dzi臋ki tym narz臋dziom, skrypty Pythona mog膮 by膰 u偶ywane do automatyzacji r贸偶nych zada艅, od prostych czynno艣ci biurowych po bardziej zaawansowane operacje na danych.

Otwarcie i zamkni臋cie pliku

Aby otworzy膰 plik w Pythonie, u偶ywamy funkcji open(). G艂贸wne argumenty tej funkcji to 艣cie偶ka do pliku oraz tryb otwarcia. Wa偶ne jest, aby po pracy z plikiem odpowiednio go zamkn膮膰, co mo偶na zrealizowa膰 za pomoc膮 metody close(). Zalecane jest korzystanie z konstrukcji with, kt贸ra automatycznie dba o poprawne zamkni臋cie pliku.

# Otwarcie pliku w trybie odczytu
plik = open("sciezka/do/pliku.txt", "r")
# ... operacje na pliku ...
plik.close()

# Alternatywna metoda z u偶yciem with
with open("sciezka/do/pliku.txt", "r") as plik:
    # ... operacje na pliku ...

Do dyspozycji mamy r贸偶ne tryby otwarcia pliku:

Odczytywanie i zapisywanie danych z/do pliku

Odczytanie ca艂ego pliku mo偶na zrealizowa膰 za pomoc膮 metody readlines(), kt贸ra zwr贸ci list臋 linii z pliku. Ka偶dy element tej listy to napis reprezentuj膮cy kolejny wiersz. Zapis danych do pliku odbywa si臋 przy u偶yciu metody write().

with open("sciezka/do/pliku.txt", "r") as plik:
    # Odczytanie zawarto艣ci pliku
    wiersze = plik.readlines()
    for wiersz in wiersze:
        print(wiersz.strip())  # strip() usuwa znaki ko艅ca linii

# Zapis nowych danych do pliku
with open("sciezka/do/pliku.txt", "w") as plik:
    plik.write("nowy tekst\nwiersz nr. 2\n")

Pami臋tajmy, aby wybiera膰 odpowiedni tryb otwarcia pliku zale偶nie od planowanych operacji!

Modu艂 pathlib

Wsp贸艂czesna praca z plikami i folderami w Pythonie sta艂a si臋 znacznie bardziej intuicyjna i wydajna dzi臋ki wprowadzeniu modu艂u pathlib w wersji 3.4. Zamiast manipulowania 艣cie偶kami jako zwyk艂ymi 艂a艅cuchami znak贸w, pathlib pozwala na reprezentowanie 艣cie偶ek jako obiekt贸w z wieloma u偶ytecznymi metodami.

Oto kilka podstawowych metod dost臋pnych w klasie Path:

Poni偶ej przedstawiam, jak u偶ywa膰 wymienionych metod:

from pathlib import Path

sciezka = Path("/sciezka/do/pliku.txt")

if sciezka.exists():
    print("Plik istnieje.")
else:
    print("Plik nie istnieje.")

zawartosc = sciezka.read_text()
print(zawartosc)

sciezka.write_text("Nowy tekst w pliku.")

Reprezentowanie folderu jest r贸wnie proste:

folder = Path("/sciezka/do/folderu")

for element in folder.iterdir():
    print(element)

Dzi臋ki obiektowemu podej艣ciu pathlib, mo偶emy 艂atwo sprawdzi膰, czy dany obiekt to plik czy folder:

if element.is_file():
    print("To jest plik.")
elif element.is_dir():
    print("To jest folder.")

pathlib oferuje r贸wnie偶 wiele innych przydatnych metod, takich jak:

Przyk艂ad u偶ycia .mkdir() i sprawdzenia istnienia folderu:

if not folder.exists():
    folder.mkdir(parents=True, exist_ok=True)

Parametr parents=True sprawia, 偶e zostan膮 utworzone wszystkie nieistniej膮ce foldery nadrz臋dne, a exist_ok=True zapobiega b艂臋dom, je艣li folder ju偶 istnieje.

Por贸wnanie modu艂贸w pathlib i os

Funkcjonalno艣膰 pathlib os
Bie偶膮cy katalog roboczy Path.cwd() os.getcwd()
Katalog domowy Path.home() os.path.expanduser("~")
Sprawdzanie istnienia Path('/some/path').exists() os.path.exists('/some/path')
Sprawdzanie katalogu Path('/some/path').is_dir() os.path.isdir('/some/path')
Sprawdzanie pliku Path('/some/path').is_file() os.path.isfile('/some/path')
Tworzenie katalogu Path('/new/dir').mkdir(parents=True, exist_ok=True) os.makedirs('/new/dir', exist_ok=True)
Usuwanie katalogu Path('/some/dir').rmdir() os.rmdir('/some/dir')
Usuwanie pliku Path('/some/file').unlink() os.remove('/some/file')
Zmiana nazwy Path('/old/name').rename('/new/name') os.rename('/old/name', '/new/name')
Odczyt tekstu z pliku Path('/some/file').read_text() with open('/some/file') as f: content = f.read()
Zapis tekstu do pliku Path('/some/file').write_text('New content') with open('/some/file', 'w') as f: f.write('New content')
Odczyt bajt贸w z pliku Path('/some/file').read_bytes() with open('/some/file', 'rb') as f: content = f.read()
Zapis bajt贸w do pliku Path('/some/file').write_bytes(b'New content') with open('/some/file', 'wb') as f: f.write(b'New content')
Iterowanie przez katalog for item in Path('.').iterdir(): print(item) for item in os.listdir('.'): print(item)
Wzorzec glob for p in Path('.').glob('*.txt'): print(p) import glob; for p in glob.glob('*.txt'): print(p)
Rekurencyjny glob for p in Path('.').rglob('*.txt'): print(p) import glob; for p in glob.iglob('**/*.txt', recursive=True): print(p)
Absolutna 艣cie偶ka abs_path = Path('some/relative/path').resolve() abs_path = os.path.abspath('some/relative/path')

Modu艂 pathlib oferuje bardziej nowoczesne, obiektowe podej艣cie do pracy z systemem plik贸w, podczas gdy os i os.path dostarczaj膮 bardziej tradycyjne, proceduralne metody. pathlib jest zazwyczaj bardziej intuicyjny i czytelny, szczeg贸lnie dla operacji na 艣cie偶kach plik贸w.

Spis Tre艣ci

    Praca z plikami i folderami
    1. Otwarcie i zamkni臋cie pliku
    2. Odczytywanie i zapisywanie danych z/do pliku
    3. Modu艂 pathlib
    4. Por贸wnanie modu艂贸w pathlib i os