6.1 Praca z plikami
Python oferuje wiele wbudowanych funkcji i modułów do pracy z plikami i katalogami. Podstawowe operacje wykonywane są przy użyciu wbudowanych modułów os
, shutil
i innych.
Trzy główne operacje z plikami:
- Kopiowanie
- Przenoszenie
- Usuwanie
Do ich wykonania idealnie nadaje się moduł shutil
.
Kopiowanie pliku
import shutil
shutil.copy('source.txt', 'destination.txt')
Przenoszenie pliku
import shutil
shutil.move('source.txt', 'destination.txt')
Usuwanie pliku
import os
os.remove('example.txt')
Prościej się nie da.
6.2 Sprawdzanie istnienia pliku
Często potrzeba sprawdzić, czy dany plik istnieje. Do tego moduł os
ma specjalną metodę — exists()
.
Sprawdzanie istnienia pliku
import os
if os.path.exists('example.txt'):
print("File exists")
else:
print("File does not exist")
# Jeśli plik nie istnieje, program wykona działania opisane w bloku else.
# Na przykład, można wyświetlić ostrzeżenie, stworzyć nowy plik lub zakończyć działanie programu.
Jeśli plik nie istnieje, program może to obsłużyć za pomocą warunków lub wyrzucić wyjątek.
6.3 Sprawdzanie typu obiektu: plik czy katalog
Często potrzeba sprawdzić, czy obiekt jest plikiem czy katalogiem. Na przykład, jeśli czytasz całą zawartość katalogu i musisz inaczej przetwarzać pliki, a inaczej katalogi.
W takich przypadkach są dwie specjalne metody — isdir()
, która sprawdza, czy obiekt jest katalogiem, i isfile()
, która sprawdza, czy obiekt jest plikiem.
Sprawdzanie — to katalog czy nie
if os.path.isdir('example_directory'):
print("To katalog")
else:
print("To nie jest katalog")
Sprawdzanie — to plik czy nie
if os.path.isfile('example_file'):
print("To plik")
else:
print("To nie jest plik")
To bardzo przydatne funkcje, które będziesz używać częściej, niż myślisz. :)
6.4 Praca z ścieżkami
Moduł os
ma moduł podrzędny os.path
, który zawiera użyteczne funkcje do pracy z plikami i katalogami. Oto niektóre z nich:
Pobieranie rozszerzenia pliku
Funkcja splitext()
dzieli nazwę pliku na dwie części i zwraca listę z dwóch elementów: nazwy i rozszerzenia.
import os.path
# Pobieranie rozszerzenia pliku
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"Rozszerzenie pliku: {file_extension}")
Pobieranie nazwy pliku bez rozszerzenia
import os.path
# Pobieranie nazwy pliku bez rozszerzenia
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"Nazwa pliku bez rozszerzenia: {file_name}")
Pobieranie nazwy pliku ze ścieżki
Funkcja basename()
zwraca tylko nazwę pliku, odcinając całą ścieżkę.
import os.path
# Pobieranie nazwy pliku ze ścieżki
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"Nazwa pliku: {file_name}")
Pobieranie katalogu ze ścieżki
Równie łatwo pobrać tylko katalog z nazwy pliku za pomocą funkcji dirname()
.
import os.path
# Pobieranie katalogu ze ścieżki
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"Katalog: {directory}")
Łączenie ścieżek
Jeśli masz osobno katalog i osobno nazwę pliku, to możesz uzyskać pełną ścieżkę do tego pliku.
import os.path
# Łączenie ścieżek
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Pełna ścieżka: {full_path}")
6.5 Platformowo niezależne ścieżki
Przy pracy ze ścieżkami ważne jest uwzględnienie różnic między systemami operacyjnymi. Separatory ścieżek mogą się różnić, a kod działający na jednej platformie może nie działać na innej. Aby uniknąć problemów przy przenoszeniu kodu między różnymi systemami operacyjnymi, używaj funkcji os.path.join()
, os.path.abspath()
oraz os.path.dirname()
, które zapewniają kompatybilność z różnymi platformami.
Na przykład:
import os
# Łączenie ścieżek w sposób platformowo niezależny
directory = 'some_directory'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Pełna ścieżka: {full_path}")
Pobieranie ścieżki absolutnej
Jeśli masz tylko ścieżkę względną do bieżącego katalogu roboczego, ale chcesz ją przekształcić w ścieżkę absolutną, masz do tego funkcję abspath()
.
import os.path
# Pobieranie ścieżki absolutnej
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"Ścieżka absolutna: {absolute_path}")
Ważne!
Zawsze korzystaj z funkcji systemowych przy pracy ze ścieżkami, ponieważ twój kod może być uruchomiony na innym systemie operacyjnym, gdzie separator plików nie jest \
, a /
, lub gdzie zabronione są " : "
w ścieżkach albo coś jeszcze.
GO TO FULL VERSION