12.2.2 Bieżący katalog roboczy

>>> import os
>>> os.getcwd()


>>> os.listdir(os.curdir)

>>> os.chdir(folder_name)     #A
>>> os.getcwd()

12.2.3 Poruszanie się po katalogach przy pomocy pathlib

>>> import pathlib
>>> cur_path = pathlib.Path()
>>> cur_path.cwd()
WindowsPath('C:/Users/Ja/Documents')

12.2.4 Operacje na nazwach ścieżek

>>> import os
>>> print(os.path.join("bin", "utils", "disktools"))
bin\utils\disktools


>>> import os
>>> print(os.path.join("bin", "utils", "disktools"))
bin/utils/disktools


>>> import os
>>> print(os.path.join("mój_katalog\\bin", "utils\\disktools\\chkdisk"))
mój_katalog\bin\utils\disktools\chkdisk


>>> ścieżka1 = os.path.join("mój_katalog", "bin")
>>> ścieżka2 = os.path.join("utils", "disktools'", "chkdisk")
>>> print(os.path.join(ścieżka1, ścieżka2))
mój_katalog\bin\utils\disktools'\chkdisk


>>> import os
>>> os.path.basename(os.path.join("jakiś", "katalog", "ścieżka.jpg"))
'ścieżka.jpg'
>>> os.path.dirname(os.path.join("jakiś", "katalog", "ścieżka.jpg"))
'jakiś/katalog'


>>> os.path.splitext(os.path.join("jakiś", "katalog", "ścieżka.jpg"))
('jakiś/katalog/ścieżka', '.jpg')


>>> import os
>>> os.path.expandvars("$HOME/tmp")
'/home/ja/tmp'

12.2.5 Operacje na nazwach ścieżek przy użyciu pathlib

>>> from pathlib import Path
>>> bieżąca_ścieżka = Path()
>>> print(bieżąca_ścieżka.joinpath('bin', 'utils', 'disktools'))
bin/utils/disktools


>>> bieżąca_ścieżka / 'bin' / 'utils' / 'disktools'
WindowsPath('bin/utils/disktools')


>>> from pathlib import Path
>>> bieżąca_ścieżka = Path()
>>> print(bieżąca_ścieżka.joinpath('bin', 'utils', 'disktools'))
bin/utils/disktools


>>> jakaś_ścieżka = WindowsPath('bin/utils/disktools')
>>> print(jakaś_ścieżka.parts)
('bin', 'utils', 'disktools')


>>> jakaś_ścieżka = Path('jakiś', 'katalog', 'ścieżka.jpg')
>>> jakaś_ścieżka.name
'ścieżka.jpg'
>>> print(jakaś_ścieżka.parent)
jakiś/katalog
>>> jakaś_ścieżka.suffix
'.jpg'

12.2.6 Użyteczne stałe i funkcje

>>> import os
>>> os.name
'nt'

>>> import os
>>> if os.name == 'posix':
...     katalog_root = "/"
... elif os.name == 'nt':
...     katalog_root = "C:\\"
... else:
...     print("Nie rozumiem, co to za system operacyjny!")
...
>>>


12.3. Uzyskiwanie informacji o plikach

>>> import os
>>> os.path.exists('C:\\Users\\ja\\Moje dokumenty')
True
>>> os.path.exists('C:\\Users\\ja\\Moje dokumenty\\List.doc')
True
>>> os.path.exists('C:\\Users\\ja\\Moje dokumenty\qwerty')
False
>>> os.path.isdir('C:\\Users\\ja\\Moje dokumenty')
True
>>> os.path.isfile('C:\\Users\\ja\\Moje dokumenty')
False
>>> os.path.isdir('C:\\Users\\ja\\Moje dokumenty\\List.doc')
False
>>> os.path.isfile('C:\\Users\\ja\\Moje dokumenty\\List.doc')
True


12.3.1 Uzyskiwanie informacji o plikach przy użyciu scandir

>>> with os.scandir(".") as mój_katalog:
...     for element in mój_katalog:
...             print(element.name, element.is_file())
...
Desktop False
Music False
test.js True
books False
program.py True


12.4 Więcej operacji w systemie plików

>>> os.chdir(os.path.join('C:', 'Moje dokumenty', 'tmp'))
os.listdir(os.curdir)
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp', 'rejestr.bkp']


>>> glob.glob("*")
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp', 'rejestr.bkp', 'test.txt']
>>> glob.glob("*bkp")
['rejestr.bkp']
>>> glob.glob("?.tmp")
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp']
>>> glob.glob("*[0-9].tmp")
['1.tmp', '7.tmp']


>>> import os
>>> os.rename('text.txt', 'test.txt.old')
>>> os.listdir(os.curdir)
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp', 'test.txt.old']


>>> os.remove('test.txt.old')
>>> os.listdir(os.curdir)
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp']


>>> os.makedirs("mój_katalog")
>>> os.listdir(os.curdir)
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp', 'mój_katalog']
>>> os.path.isdir('mój_katalog')
True


>>> os.rmdir("mój_katalog")
>>> os.listdir(os.curdir)
['książka1.doc.tmp', 'a.tmp', '1.tmp', '7.tmp']

12.4.1 Więcej operacji w systemie plików przy użyciu pathlib

>>> nowa_ścieżka = bieżąca_ścieżka.joinpath('C:', 'Moje Dokumenty', 'tmp')
>>> list(nowa_ścieżka.iterdir())
[WindowsPath('książka1.doc.tmp'), WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp')]


>>> list(bieżąca_ścieżka.glob("*"))
[WindowsPath('książka1.doc.tmp'), WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp'), WindowsPath('rejestr.bkp')]
>>> list(bieżąca_ścieżka.glob("*bkp"))
[WindowsPath('rejestr.bkp)]
>>> list(bieżąca_ścieżka.glob("?.tmp"))
[WindowsPath('książka1.doc.tmp'), WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp')]
>>> list(bieżąca_ścieżka.glob("[0-9].tmp"))
[WindowsPath('1.tmp'), WindowsPath('7.tmp')]


>>> stara_ścieżka = Path('rejestr.bkp')
>>> nowa_ścieżka = Path('rejestr.bkp.old')
>>> stara_ścieżka.rename(nowa_ścieżka)
>>> list(bieżąca_ścieżka.iterdir())
[WindowsPath('książka1.doc.tmp'), WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp'), WindowsPath('rejestr.bkp.old')]


>>> nowa_ścieżka = Path('książka1.doc.tmp')
>>> nowa_ścieżka.unlink()
>>> list(bieżąca_ścieżka.iterdir())
[WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp'), WindowsPath('rejestr.bkp.old')]


>>> nowa_ścieżka = Path('mój_katalog')
>>> nowa_ścieżka.mkdir(parents=True)
[WindowsPath('mój_katalog'), WindowsPath('książka1.doc.tmp'), WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp'), WindowsPath('rejestr.bkp')]
>>> nowa_ścieżka.is_dir('mój_katalog')
True


>>> nowa_ścieżka = Path('mój_katalog')
>>> nowa_ścieżka.rmdir()
>>> nowa_ścieżka.mkdir(parents=True)
[WindowsPath('książka1.doc.tmp'), WindowsPath('a.tmp'), WindowsPath('1.tmp'), WindowsPath('7.tmp'), WindowsPath('rejestr.bkp')]

12.5 Obsługa wszystkich plików w części drzewa katalogów

import os
for korzeń, katalogi, pliki in os.walk(os.curdir):
  print("{0} zawiera {1} plików".format(korzeń, len(pliki)))
  if ".git" in katalogi:                           #A
        katalogi.remove(".git")                      #B

