Zanurkuj w Pythonie/Praca z katalogami: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1:
{{Podświetl|py}}
== 6.5. Praca z
Moduł <tt>os.path</tt> zawiera kilka funkcji służących do manipulacji plikami i
'''Przykład 6.16. Tworzenie ścieżek do plików'''
Linia 19:
# Funkcja <tt>join</tt> modułu <tt>os.path</tt> tworzy ścieżkę dostępu do pliku z jednej lub kilku ścieżek częściowych. W tym przypadku po prostu łączy dwa stringi. (Zauważ, że w Windowsie musisz używać podwójnych ukośników)
# W tym, trochę bardziej skomplikowanym, przypadku, <tt>join</tt> dopisze dodatkowy ukośnik do ścieżki przed dołączeniem do niej nazwy pliku. Byłem bardzo szczęśliwy, gdy to odkryłem, bo <tt>addSlashIfNecessary</tt> było jedną z najgłupszych małych funkcji, które musiałem napisać zaczynając programować w nowym języku. Nie pisz tej głupiej funkcji w Pythonie, mądrzy ludzie zrobili to już za Ciebie.
# <tt>expanduser</tt> rozwninie w ścieżce znak <tt>~</tt> na ścieżkę folderu domowego aktualnie zalogowanego użytkownika. Ta funkcja działa w każdym systemie, w którym użytkownicy mają swoje
# Używając tych technik, możesz łatwo tworzyć ścieżki do plików i
'''Przykład 6.17. Rozdzielanie ścieżek'''
Linia 36:
>>> extension
'.mp3'
# Funkcja <tt>split</tt> dzieli pełną ścieżkę i zwraca krotkę zawierającą ścieżkę
# Przypisujesz wynik działania funkcji <tt>split</tt> krotce dwóch zmiennych. Każda zmienna będzie teraz zawierać wartość odpowiedniego elementu krotki zwróconej przez funkcję <tt>split</tt>.
# Pierwsza zmienna, <tt>filepath</tt>, zawiera pierwszy element krotki - ścieżkę pliku.
Linia 42:
# Moduł <tt>os.path</tt> zawiera też funkcję <tt>splitext</tt>, która zwraca krotkę zawierającą właściwą nazwę pliku i jego rozszerzenie. Używasz tej samej techniki, co poprzednio, do przypisania każdej części do osobnej zmiennej.
'''Przykład 6.18. Wyświetlanie zawartości
>>> os.listdir("c:\\music\\_singles\\") #(1)
Linia 65:
'System Volume Information', 'TEMP', 'WINNT']
# Funkcja <tt>listdir</tt> pobiera ścieżkę do
# <tt>listdir</tt> zwraca zarówno pliki jak i
# Możesz użyć filtrowania listy i funkcji <tt>isfile</tt> modułu <tt>os.path</tt> aby oddzielić pliki od
# <tt>os.path</tt> zawiera też funkcję <tt>isdir</tt>, zwracającą <tt>1</tt> jeśli ścieżka reprezentuje
'''Przykład 6.19. Listowanie zawartości
def listDirectory(directory, fileExtList):
Linia 80:
if os.path.splitext(f)[1] in fileExtList] #(3) (4) (5)
# <tt>os.listdir(directory)</tt> zwraca listę wszystkich plików i
# Iterując po liście z użyciem zmiennej <tt>f</tt>, wykorzystujemy <tt>os.path.normcase(f)</tt>, aby znormalizować wielkość liter zgodnie z domyślnym systemem operacyjnym. Funkcja <tt>normcase</tt> jest użyteczną, prostą funkcją, która stanowi równoważnik pomiędzy systemami operacyjnymi, w których wielkość liter w nazwie pliku nie ma znaczenia, w którym np. <tt class="lang-none">mahadeva.mp3</tt> i <tt class="lang-none">mahadeva.MP3</tt> są takimi samymi plikami. Na przykład w Windowsie i Mac OS, <tt>normcase</tt> będzie konwertował całą nazwę pliku na małe litery, w systemach kompatybilnych z UNIX-em funkcja ta będzie zwracała niezmienioną nazwę pliku.
# Iterując ponownie po liście z użyciem <tt>f</tt>, wykorzystujemy <tt>os.path.splitext(f)</tt>, aby podzielić nazwę pliku na nazwę i jej rozszerzenie.
Linia 87:
{{Infobox|
Jeślli to możliwe, powinieneś używać funkcji z modułów <tt>os</tt> i <tt>os.path</tt> do manipulacji plikami,
}}
Jest jeszcze jedna metoda dostania się do zawartości
'''Przykład 6.20. Listowanie zawartości
>>> os.listdir("c:\\music\\_singles\\") #(1)
Linia 111:
>>> glob.glob('c:\\music\\*\\*.mp3') #(4)
# Jak wcześniej powiedzieliśmy, <tt>os.listdir</tt> pobiera ścieżkę do
# Z drugiej strony, moduł <tt>glob</tt> na podstawie podanego wyrażenia (ang. ''wildcard''), zwraca pełne ścieżki wszystkich plików, które spełniają te wyrażenie. Tutaj wyrażenie jest ścieżką do katalogu plus "*.mp3", który będzie dopasowywał wszystkie pliki <tt class="lang-none">.mp3</tt>. Dodajmy, że każdy element zwracanej listy jest już pełną ścieżką do pliku.
# Jeśli chcesz znaleźć wszystkie pliki w określonym
# Teraz rozważ taki scenariusz: mamy
<noinclude>
|