os Python

Содержание
Введение
getcwd() и chdir()
listdir(): Содержимое директории
Создать директорию
Удалить директорию
rename(): Переименовать файл
os.stat(): информация о файле
os.walk(): обход директорий
os.environ()
os.pardir
os.path()
os.getlogin(): имя пользователя
dir(): все атрибуты
Похожие статьи

Введение

Этот модуль предоставляет портативный способ использования функциональности, зависящей от операционной системы.

Если вы просто хотите прочитать или записать файл, обратитесь к open() , если вы хотите управлять путями, обратитесь к модулю os.path , и если вы хотите прочитать все строки во всех файлах в командной строке, обратитесь к модулю fileinput.

Для создания временных файлов и каталогов обратитесь к модулю tempfile, а для высокоуровневой обработки файлов и каталогов обратитесь к модулю shutil .

Статьи, которые хорошо дополняют эту:

Файлы в Linux

Основы работы с файлами в Python

Официальная документация

getcwd() и chdir()

Получить текущую директорию можно методом getcwd()

Перейти в другую директорию можно методом chdir()

import os # get current working directory print(os.getcwd()) # change directory os.chdir('/mnt/c/Users/Andrei/sandbox') print(os.getcwd())

/mnt/c/Users/Andrei/sandbox/python /mnt/c/Users/Andrei/sandbox

listdir()

Получить содержимое директории можно методом listdir()

Если все файлы лежат в одной директории, например:

in_same/ |-- main.py |-- php |-- python `-- test_complete

import os # list directory contents print("os.listdir()") print(os.listdir())

os.listdir() ['main.py', 'php', 'python', 'test_complete']

Если нужно изучть содержимое поддиректории

listdir/ |-- data | |-- partners.txt | `-- sites.txt `-- main.py

# main.py import os path = os.path.join(os.path.dirname(__file__), "data") print(os.listdir(path))

['partners.txt', 'sites.txt']

Предположим, что мы находимся в директории python:

python/ ├── copy_ex.py ├── dir_a │ ├── Armenia.html │ ├── Finland.html │ ├── Spain │ └── Sweden.html └─ dir_b

Для обхода директорий воспользуемся os.listdir()

shutil пока использовать не будем. Для простоты укажем абсолютные пути до директорий.

# copy_ex.py import os # Пути в WSL src = "/mnt/c/Users/Andrei/dir_a" dst = "/mnt/c/Users/Andrei/dir_b" # Пути в Windows src = "C:\\Users\\Andrei\\python\\dir_a" dst = "C:\\Users\\Andrei\\python\\dir_b" dir_a_files = os.listdir(src) print(dir_a_files) dir_b_files = os.listdir(dst) print(dir_b_files) os.chdir(src) for file in dir_a_files: with open(file) as f: print(file, f.read())

python copy_ex.py

['Armenia.html', 'Finland.html', 'Spain', 'Sweden.html'] ['Armenia.html', 'Finland.html', 'Sweden.html'] Armenia.html tickets to Armenia hotels in Armenia Finland.html tickets to Finland hotels in Finland Traceback (most recent call last): File "/mnt/c/Users/Andrei/python/copy_ex.py", line 16, in <module> with open(file) as f: ^^^^^^^^^^ IsADirectoryError: [Errno 21] Is a directory: 'Spain'

Как вариант может появиться PermissionError

… PermissionError: [Errno 13] Permission denied: 'Spain'

Открыть директорию как файл не получилось поэтому нужно добавлять проверку на файл os.path.isfile()

Создать директорию

Создать директорию можно методами mkdir() и makedirs()

import os # create dir without subdirs os.mkdir('eth1.ru') # create dir with subdirs os.makedirs('heihei.ru/Spain/travel') print("os.listdir()") print(os.listdir())

os.listdir() ['hehei.ru', 'php', 'python', 'test_complete', 'eth1.ru']

Если нужно предварительно проверить наличие директории с таким же именем

import os BACKUP_PATH = os.path.join(os.path.dirname(__file__), "backup") if not os.path.exists(BACKUP_PATH): os.makedirs(BACKUP_PATH)

Удалить директорию

Удалить директорию можно методами rmdir() и removedirs()

import os # remove dir without subdirs os.rmdir('eth1.ru') # remove dir with subdirs os.removedirs('heihei.ru/Spain/travel') print("os.listdir()") print(os.listdir())

os.listdir() ['php', 'python', 'test_complete']

rename()

Переименовать файл можно методом rename()

import os # rename file os.rename('test.txt', 'demo.txt') print("os.listdir()") print(os.listdir()) os.rename('demo.txt', 'test.txt') print("os.listdir()") print(os.listdir())

os.listdir() ['demo.txt', 'php', 'python', 'test_complete'] os.listdir() ['php', 'python', 'test.txt', 'test_complete']

os.stat()

import os os.chdir('/mnt/c/Users/Andrei/sandbox') # info print("os.stat('test.txt')") print(os.stat('test.txt')) # file size print("os.stat('test.txt').st_size") print(os.stat('test.txt').st_size) # modification time print("os.stat('test.txt').st_mtime") print(os.stat('test.txt').st_mtime)

os.stat('test.txt') os.stat_result(st_mode=33279, st_ino=48695170971005453, st_dev=47, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1683214359, st_mtime=1683214359, st_ctime=1683214612) os.stat('test.txt').st_size 0 os.stat('test.txt').st_mtime 1683214359.8984318

import os from datetime import datetime os.chdir('/mnt/c/Users/Andrei/sandbox') mod_time = os.stat('test.txt').st_mtime print(datetime.fromtimestamp(mod_time))

2024-12-12 22:16:45.098432

os.walk()

os.walk() возвращает итератор элементы которого это кортежи из трёх элементов: dirpath, dirname, filenames

Пройдёмся по директории glob_ex из статьи про glob

glob_ex/ ├── glob_ex.py ├── glob_ex1.py ├── glob_ex3.py ├── heihei │ ├── Armenia │ │ ├── holidays │ │ │ ├── easter.html │ │ │ └── sargis.html │ │ └── index.html │ ├── Finland.html │ ├── Spain.html │ └── Sweden.html ├── iglob_ex.py ├── sample_files │ ├── it.txt │ ├── testing.txt │ └── travel.txt └── topbicycle ├── forward.html ├── stark.html └── stels.html

import os from datetime import datetime path = '/mnt/c/Users/Andrei/sandbox/python/glob_ex/' os.chdir(path) walk = os.walk(path) print("next:", walk.__next__()) print("next:", walk.__next__()) print("next:", next(walk))

python os_walk_ex.py

next: ('/mnt/c/Users/Andrei/sandbox/python/glob_ex/', ['heihei', 'sample_files', 'topbicycle'], ['glob_ex.py', 'glob_ex1.py', 'glob_ex3.py', 'iglob_ex.py']) next: ('/mnt/c/Users/Andrei/sandbox/python/glob_ex/heihei', ['Armenia'], ['Finland.html', 'Spain.html', 'Sweden.html']) next: ('/mnt/c/Users/Andrei/sandbox/python/glob_ex/heihei/Armenia', ['holidays'], ['.hidden.html', 'index.html'])

import os from datetime import datetime path = '/mnt/c/Users/Andrei/sandbox/python/glob_ex/' os.chdir(path) for dirpath, dirnames, filenames in os.walk(path):     print('Current Path:', dirpath)     print('Directories:', dirnames)     print('Files:', filenames)     print()

python os_walk_ex.py

Current Path: /mnt/c/Users/Andrei/sandbox/python/glob_ex/ Directories: ['heihei', 'sample_files', 'topbicycle'] Files: ['glob_ex.py', 'glob_ex1.py', 'glob_ex3.py', 'iglob_ex.py'] Current Path: /mnt/c/Users/Andrei/sandbox/python/glob_ex/heihei Directories: ['Armenia'] Files: ['Finland.html', 'Spain.html', 'Sweden.html'] Current Path: /mnt/c/Users/Andrei/sandbox/python/glob_ex/heihei/Armenia Directories: ['holidays'] Files: ['.hidden.html', 'index.html'] Current Path: /mnt/c/Users/Andrei/sandbox/python/glob_ex/heihei/Armenia/holidays Directories: [] Files: ['easter.html', 'sargis.html'] Current Path: /mnt/c/Users/Andrei/sandbox/python/glob_ex/sample_files Directories: [] Files: ['it.txt', 'testing.txt', 'travel.txt'] Current Path: /mnt/c/Users/Andrei/sandbox/python/glob_ex/topbicycle Directories: [] Files: ['forward.html', 'stark.html', 'stels.html']

os.environ()

import os print(os.environ.get("HOME"))

/home/andrei

os.pardir

import os print(os.pardir)

python os_pardir.py

..

Про применение os.pardir совместно с os.path можете прочитать здесь

os.path()

Про os.path есть отдельная статья здесь

getlogin()

Получить имя текущего пользователя с помощью Python можно методом getlogin()

import os print(os.getlogin())

python os_getlogin.py

Andrei

dir()

Список всех атрибутов os можно получить с помощью функции dir()

import os print(dir(os))

python os_ex.py

['CLD_CONTINUED', 'CLD_DUMPED', 'CLD_EXITED', 'CLD_KILLED', 'CLD_STOPPED', 'CLD_TRAPPED', 'DirEntry', 'EFD_CLOEXEC', 'EFD_NONBLOCK', 'EFD_SEMAPHORE', 'EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_LOCK', 'F_OK', 'F_TEST', 'F_TLOCK', 'F_ULOCK', 'GRND_NONBLOCK', 'GRND_RANDOM', 'GenericAlias', 'MFD_ALLOW_SEALING', 'MFD_CLOEXEC', 'MFD_HUGETLB', 'MFD_HUGE_16GB', 'MFD_HUGE_16MB', 'MFD_HUGE_1GB', 'MFD_HUGE_1MB', 'MFD_HUGE_256MB', 'MFD_HUGE_2GB', 'MFD_HUGE_2MB', 'MFD_HUGE_32MB', 'MFD_HUGE_512KB', 'MFD_HUGE_512MB', 'MFD_HUGE_64KB', 'MFD_HUGE_8MB', 'MFD_HUGE_MASK', 'MFD_HUGE_SHIFT', 'Mapping', 'MutableMapping', 'NGROUPS_MAX', 'O_ACCMODE', 'O_APPEND', 'O_ASYNC', 'O_CLOEXEC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_FSYNC', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_PATH', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TMPFILE', 'O_TRUNC', 'O_WRONLY', 'POSIX_FADV_DONTNEED', 'POSIX_FADV_NOREUSE', 'POSIX_FADV_NORMAL', 'POSIX_FADV_RANDOM', 'POSIX_FADV_SEQUENTIAL', 'POSIX_FADV_WILLNEED', 'POSIX_SPAWN_CLOSE', 'POSIX_SPAWN_DUP2', 'POSIX_SPAWN_OPEN', 'PRIO_PGRP', 'PRIO_PROCESS', 'PRIO_USER', 'P_ALL', 'P_NOWAIT', 'P_NOWAITO', 'P_PGID', 'P_PID', 'P_PIDFD', 'P_WAIT', 'PathLike', 'RTLD_DEEPBIND', 'RTLD_GLOBAL', 'RTLD_LAZY', 'RTLD_LOCAL', 'RTLD_NODELETE', 'RTLD_NOLOAD', 'RTLD_NOW', 'RWF_APPEND', 'RWF_DSYNC', 'RWF_HIPRI', 'RWF_NOWAIT', 'RWF_SYNC', 'R_OK', 'SCHED_BATCH', 'SCHED_FIFO', 'SCHED_IDLE', 'SCHED_OTHER', 'SCHED_RESET_ON_FORK', 'SCHED_RR', 'SEEK_CUR', 'SEEK_DATA', 'SEEK_END', 'SEEK_HOLE', 'SEEK_SET', 'SPLICE_F_MORE', 'SPLICE_F_MOVE', 'SPLICE_F_NONBLOCK', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOEXEC', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_WRITE', 'TMP_MAX', 'WCONTINUED', 'WCOREDUMP', 'WEXITED', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WNOWAIT', 'WSTOPPED', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'XATTR_CREATE', 'XATTR_REPLACE', 'XATTR_SIZE_MAX', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_check_methods', '_execvpe', '_exists', '_exit', '_fspath', '_fwalk', '_get_exports_list', '_spawnvef', '_walk', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'copy_file_range', 'cpu_count', 'ctermid', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'environb', 'error', 'eventfd', 'eventfd_read', 'eventfd_write', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'fwalk', 'get_blocking', 'get_exec_path', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getegid', 'getenv', 'getenvb', 'geteuid', 'getgid', 'getgrouplist', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getpriority', 'getrandom', 'getresgid', 'getresuid', 'getsid', 'getuid', 'getxattr', 'initgroups', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'listxattr', 'lockf', 'login_tty', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'memfd_create', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pidfd_open', 'pipe', 'pipe2', 'popen', 'posix_fadvise', 'posix_fallocate', 'posix_spawn', 'posix_spawnp', 'pread', 'preadv', 'putenv', 'pwrite', 'pwritev', 'read', 'readlink', 'readv', 'register_at_fork', 'remove', 'removedirs', 'removexattr', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sched_get_priority_max', 'sched_get_priority_min', 'sched_getaffinity', 'sched_getparam', 'sched_getscheduler', 'sched_param', 'sched_rr_get_interval', 'sched_setaffinity', 'sched_setparam', 'sched_setscheduler', 'sched_yield', 'sendfile', 'sep', 'set_blocking', 'set_inheritable', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setpriority', 'setregid', 'setresgid', 'setresuid', 'setreuid', 'setsid', 'setuid', 'setxattr', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'splice', 'st', 'stat', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sync', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'terminal_size', 'times', 'times_result', 'truncate', 'ttyname', 'umask', 'uname', 'uname_result', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitid', 'waitid_result', 'waitpid', 'waitstatus_to_exitcode', 'walk', 'write', 'writev']

Похожие статьи
Основы Python
Type Hints
__future__
configparser
Менеджер контекста
docstring
#!: Shebang
Объекты
Итерация
os
pathlib

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: