Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
os.walk to funkcja pozwalająca na przeszukiwanie katalogów. Jako argument przyjmuje ścieżkę startową (w minimalnej wersji konfiguracji), a następnie umożliwia nam iterację po wynikach. Ilustruje to poniższy przykład:
import os
for p in os.walk('D:\\skany'):
print(p)
Wynika działania:

Iterując po wyniku otrzymujemy krotki. Pierwsza wartość (str) w elemencie to ścieżka katalogu którego dotyczą dalsze dane w krotce. Druga wartość w krotce to katalogi zawarte w danym folderze, trzecia to pliki. Walk pracuje rekurencyjnie, wejdziemy więc w głąb wszystkich katalogów. Możemy też zmienić kierunek przeszukiwania katalogów:
import os
for p in os.walk('D:\\skany',False):
print(p)
Ustawienie w drugim argumencie funkcji walk wartości fałsz zmienia kierunek przeszukiwania:

Ponieważ otrzymujemy krotki, możemy też odebrać dane do osobnych list. Przy okazji podrzucam patent na wizualizację drzewa:
import os
for katalog,podkatalogi, pliki in os.walk("d:\\skany"):
print(f'KATALOG: {katalog}:')
if(len(podkatalogi)>0):
print(f' PODKATALOGI: ')
for po in podkatalogi:
print(f' {po}')
if(len(pliki)>0):
print(f' PLIKI: ')
for pl in pliki:
print(f' {pl}')
Wynik działania:

Moduł os posiada wbudowane funkcje chdir i getcwd umożliwiające odpowiednio zmianę i sprawdzenie aktualnej ścieżki.
import os
os.chdir('d:\\skany')
print(os.getcwd())
Sprowadza się to do wywołania funkcji listdir:
print(os.listdir())
W efekcie uzyskamy zarówno pliki jak i katalogi w postaci jednej listy:
['201911161539.pdf', 'archiwum', 'nowe']
Sprowadza się to do wywołania funkcji exists:
import os
if os.path.exists('d:\\skany'):
print('jest taki katalog')
else:
print('nie ma takiego katalogu')
Moduł os ma dwie funkcje które umożliwią nam spełnić takie wymaganie - isdir i isfile weryfikujące odpowiednio czy mamy do czynienia z katalogiem czy z plikiem:
import os
if os.path.isdir('d:\\skany'):
print('to jest katalog')
else:
print('to jest plik')
if os.path.isfile('d:\\skany\\201907111505.pdf'):
print('to jest plik')
else:
print('to jest katalog')
Stosujemy funkcję getsize:
import os
size=os.path.getsize('d:\\skany\\201907111505.pdf')
print(f'wielkość pliku={size} bajtów')
Efekt na konsoli:
wielkość pliku=1262625 bajtów
Istnieją do tego funkcje odpowiednio mkdir i rmdir
import os
os.mkdir('d:\\skany\\nowe')
os.rmdir('d:\\skany\\nowe')
Sprowadza się do wywołania funkcji remove:
import os
os.remove(‘d:\\skany\\201907111505.pdf’)
Pokazane wyżej funkcje z modułów "os" i "os.path" działają i są wszędzie, ale operują na ścieżkach jak na zwykłym tekście - a sklejanie ścieżek z tekstu łatwo psuje się między systemami (Windows i Linux używają innego separatora katalogów). Nowocześniejszym podejściem jest moduł "pathlib", w którym ścieżka to obiekt, a łączenie katalogów zapisujemy operatorem "/":
from pathlib import Path
katalog = Path('d:/skany')
plik = katalog / 'raport.txt'
print(plik) # cała ścieżka
print(plik.name) # sama nazwa pliku
print(plik.suffix) # rozszerzenie
print(katalog.exists()) # czy katalog istnieje
print(plik.parent) # katalog nadrzędny
Obiekt Path sam dba o poprawny separator w danym systemie, a metody takie jak "exists", "is_dir", "name", "suffix" czy "parent" zastępują funkcje z "os.path" w czytelniejszej formie. Zawartość katalogu wypiszemy jedną pętlą, bez osobnej funkcji "listdir":
for element in Path('d:/skany').iterdir():
print('katalog:' if element.is_dir() else 'plik: ', element.name)
Moduł "os" nadal jest potrzebny do rzeczy systemowych (zmienne środowiskowe, uruchamianie procesów), ale do samego poruszania się po plikach i katalogach "pathlib" jest dziś domyślnym wyborem.
Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.
Szkolenie Python od podstaw, przez analizę danych, do machine learning
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...