Zanurkuj w Pythonie/Praca z katalogami: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Robwolfe (dyskusja | edycje)
Nie podano opisu zmian
Linia 67:
# Funkcja <tt>listdir</tt> pobiera ścieżkę do folderu i zwraca listę jego zawartości.
# <tt>listdir</tt> zwraca zarówno pliki jak i foldery, bez wskazania które są którymi.
# Możesz użyć filtrowania listy i funkcji <tt>isfile</tt> modułu <tt>os.path</tt> aby oddzielić pliki od folderów. <tt>isfile</tt> pobiera ścieżkę i zwraca <tt>1</tt>, jeśli reprezentuje ona plik albo <tt>0</tt> w innym przypadku. W przykładzie używamy <tt>os.path.join</tt> aby uzyskać pełną ścieżkę, ale <tt>isfile</tt> pracuje też z częściowymi ścieżkami względnymi wobec bieżącego koatalogukatalogu. Możesz użyć <tt>os.getcwd()</tt> aby dostaćpobrać bieżący katalog.
# <tt>os.path</tt> zawiera też funkję <tt>isdir</tt>, zwracającą <tt>1</tt> jeśli ścieżka reprezentuje folder i <tt>0</tt> w innym przypadku. Możesz jej użyć do uzyskania listy podfolderów.
 
Linia 81:
 
# <tt>os.listdir(directory)</tt> zwraca listę wszystkich plików i folderów w folderze <tt>directory</tt>.
# Iterując listępo zaliście pomocą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 listępo zaliście pomocąz użyciem <tt>f</tt>, wykorzystujemy <tt>os.path.splitext(f)</tt>, aby podzielić nazwę pliku na nazwę i jej rozszerzenie.
# Dla każdego pliku sprawdzamy, czy rozszerzenie jest w liście plików, o które mamynam się troszczyćchodzi (czyli <tt>fileExtList</tt>, któryktóra zostałzostała przekazanyprzekazana do <tt>listDirectory</tt>).
# Dla każdego pliku, o który sięnas troszczymyinteresuje, wykorzystujemy <tt>os.path.join(directory, f)</tt>, aby skonstruować pełną ścieżkę pliku i zwrócić listę zawierającą pełne ścieżki.
 
{{Infobox|
Linia 92:
Jest jeszcze jedna metoda dostania się do zawartości folderu. Jest bardzo potężna i używa zestawu symboli wieloznacznych, z którymi mogłeś się spotkać pracując w linii komend.
 
'''ExamplePrzykład 6.20. ListingListowanie Directorieszawartości withfolderu przy pomocy <tt>glob</tt>'''
 
>>> os.listdir("c:\\music\\_singles\\") #(1)
Linia 111:
>>> glob.glob('c:\\music\\*\\*.mp3') #(4)
 
# Jak wcześniej powiedzieliśmy, <tt>os.listdir</tt> popobiera prostu z podanej ścieżkiścieżkę do folderu, i zwraca wszystkie pliki i foldery, które się w nim znajdują.
# Z innejdrugiej 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 folderze, gdzie nazwa zaczyna się od "s", a kończy na ".mp3", możemymożesz to zrobić w ten sposób.
# Teraz otrzymujemyrozważ taki scenariusz: mamy folder z muzyką z kilkoma pod folderamipodfolderami, wewnątrz których są pliki <tt class="lang-none">.mp3</tt>. Możemy dostaćpobrać listę wszystkich tych plików za pomocą jednego wywołania <tt>glob</tt>, wykorzystując połączenie dwóch wyrażeń. Pierwszym jest <tt>"*.mp3"</tt> (wyszukuje pliki .mp3), a drugim są same w sobie ścieżki do katalogów, aby przetworzyć każdy podkatalog w <tt class="lang-none">c:\music</tt>. Ta prosto wyglądająca funkcja daje nam niesamowite możliwości!
 
<noinclude>