MODUŁ os

https://docs.python.org/3/library/os.html

https://docs.python.org/3/library/os.path.html

WPROWADZENIE

Moduł 'os' dostarcza funkcji do interakcji z systemem operacyjnym. Użycie tego modułu zwiększa przenośność programów na inne platformy.


import os

os.system("date")                  # wywołanie polecenia powłoki
var = os.environ.get("SHELL")      # pobranie zawartości zmiennej powłoki
var = os.environ["SHELL"]          # notacja słownikowa
var = os.getenv("SHELL", default=None)   # alternatywa, '/bin/bash' w Debianie
# UWAGA Późniejsze zmiany wartości zmiennych w środowisku nie są widoczne.

print(var)
print(os.uname())                    # krotka z informacją o systemie
print(os.name)                       # "posix" lub "nt" lub "mac" lub ...
print(os.sep)   # separator ścieżek, '/' w Linuksie, '\\' w Windows

# current working directory 
current = os.getcwd()   # current working directory, '/home/andrzej'

# os.path is posixpath or ntpath
# Creating platform-independent directory names with join()
directory = os.path.join('main_dir', 'sub_dir')   # sklejenie z os.sep
full_file_name = os.path.join(directory, 'example.json')

print(os.path.abspath("."))   # "/home/andrzej"
path = '/home/andrzej/Pobrane'
print(os.path.basename(path))   # 'Pobrane'
print(os.path.dirname(path))   # '/home/andrzej'
print(os.path.exists(path))   # True
print(os.path.isabs(path))   # True
print(os.path.isdir(path))   # True
print(os.path.isfile(path))   # False

print(os.path.split(path))   # ('/home/andrzej', 'Pobrane')
# Split a pathname.  Returns tuple "(head, tail)" where "tail" is
# everything after the final slash.  Either part may be empty.

os.mkdir(dirname)   # tworzenie nowego katalogu
os.rename(old_name, new_name)
os.rmdir(dirname)   # usuwanie 'pustego' katalogu

# Tworzenie katalogu i pośrednich katalogów, jeżeli nie istnieją.
dirname = "A/B/C"
if not os.path.exists(dirname):
    os.makedirs(dirname)

# Narzędzia do plików.

os.chmod(path, mode)   # change the access permissions of a file
os.chmod('spam.txt', 0777)   # enabled all accesses (octal 0777 means bits 111 111 111)
os.chown(path, uid, gid)   # hange the owner and group id of path to the numeric uid and gid
os.remove(path)   # remove a file
os.rename(old_name, new_name)   # rename a file or directory
os.listdir(path)   # return a list containing the names of the files

# os.path.walk(top, func, arg)   # directory tree walk with callback function.
# Przykład: zliczanie plików PDF w drzewie podkatalogów.

n_pdf = 0   # the number of PDF files
for root, dirs, files in os.walk(top):   # walking top-down (default)
    # 'root' is a string, the path to the directory
    # 'dirs' is a list of the names of the subdirectories in 'root'
    # 'files' is a list of the names of the non-directory files in 'root'
    if 'CVS' in dirs:
        dirs.remove('CVS')  # nie odwiedzamy katalogów CVS
    for name in files:
        if name.lower().endswith(".pdf"):
            n_pdf += 1

print("The number of PDF files in {} directory is {}".format(top, n_pdf))

# Przykład: usuwanie wszystkiego w katalogu 'top' (niebezpieczne!).
# Zakładamy brak linków symbolicznych.
# Takie zadanie w powłoce bash wykonuje polecenie 'rm -rf top/*'.

for root, dirs, files in os.walk(top, topdown=False):   # walking bottom-up
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))