Работа с файлами в Python, модуль os
19.02.2018
Теги: Python • Директория • Копировать • Модуль • Удалить • Файл
Модуль позволяет работать с файлами и папками. Русские названия файлов и папок возвращаются и принимаются всеми функциями этого модуля в кодировке UTF-8, поэтому необходимо использовать функции для перекодирования строк — методы decode и encode.
Свойства и методы:
os.sepos.nameos.environos.getenv()os.putenv()os.getcwd()os.chdir()os.mkdir()os.makedirs()os.rename()os.renames()os.rmdir()os.removedirs()os.remove()илиos.unlink()os.listdir()os.walk()os.system()os.link()os.symlink()os.path
Для использования любого из методов, нужно импортировать модуль os:
import os
Свойство os.name содержит имя операционной системы, доступные варианты: 'posix', 'nt', 'mac', 'os2', 'ce', 'java'.
>>> os.name 'nt'
Свойство os.environ — словарь переменных окружения; изменяемый (можно добавлять и удалять переменные окружения).
>>> os.environ environ({'HOME': 'C:\\Users\\Evgeniy', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\Evgeniy', 'OS': 'Windows_NT', 'PATH': 'C:\\python\\Scripts\\;C:\\python\\;C:\\WINDOWS\\system32;C:\\WINDOWS', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\WINDOWS', 'TEMP': 'C:\\Users\\Evgeniy\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\Evgeniy\\AppData\\Local\\Temp', 'USERDOMAIN': 'TKMCOMP', 'USERDOMAIN_ROAMINGPROFILE': 'TKMCOMP', 'USERNAME': 'Evgeniy', 'USERPROFILE': 'C:\\Users\\Evgeniy', 'WINDIR': 'C:\\WINDOWS'})
Метод os.getenv() возвращает значение переменной окружения, метод os.putenv() устанавливает значение переменной окружения.
>>> os.getenv('PATH') 'C:\\python\\Scripts\\;C:\\python\\;C:\\WINDOWS\\system32;C:\\WINDOWS'
Метод os.getcwd() возвращает текущую рабочую директорию.
>>> os.getcwd() 'C:\\python'
Метод os.chdir() — смена текущей рабочей директории.
>>> os.chdir('C:\\Windows\\System32') >>> os.getcwd() 'C:\\Windows\\System32'
Метод os.mkdir() создаёт директорию, выдает OSError, если директория существует.
>>> os.mkdir('C:\\some-dir')
Метод os.makedirs() создаёт директорию, создавая при этом промежуточные директории.
>>> os.makedirs('C:\\some-dir\\other-dir')
Метод os.rename() переименовывает файл или директорию. Метод os.renames() служит тем же целям, но позволяет создавать промежуточные директории.
>>> os.mkdir('C:\\some-dir') >>> os.rename('C:\\some-dir', 'C:\\other-dir')
>>> os.chdir('C:\\example') >>> os.listdir() ['file.txt'] >>> os.renames('file.txt', 'some-dir\\some-file.txt') >>> os.listdir() ['some-dir'] >>> os.chdir('some-dir') >>> os.listdir() ['some-file.txt']
Метод os.rmdir() удаляет пустую директорию. Метод os.removedirs() удаляет директорию, затем пытается удалить родительские директории, и удаляет их рекурсивно, пока они пусты.
>>> os.chdir('C:\\example') >>> os.listdir() ['file.txt'] >>> os.renames('C:\\some-dir')
Метод os.remove() удаляет файл.
>>> os.remove('C:\\some-dir\\some-file.txt')
Метод os.listdir() возвращает список файлов и директорий.
>>> os.listdir('C:\\wamp\\mysql') ['bin', 'COPYING', 'docs', 'include', 'lib', 'my.ini', 'README', 'share']
Метод os.walk() возвращает объект-генератор. Из полученного объекта можно получить кортежи для каждого каталога в файловой иерархии. Каждый кортеж в коллекции содержит:
- Абсолютный адрес очередного каталога (строка)
- Имена подкаталогов текущего каталога (список)
- Имена (без адреса) файлов данного каталога
tree = os.walk('C:\\wamp\\php56') for item in tree: print(item)
('C:\\wamp\\php56', ['dev', 'ext', 'extras', 'lib'], ['deplister.exe', 'glib-2.dll', 'gmodule-2.dll', ...])
('C:\\wamp\\php56\\dev', [], ['php5ts.lib'])
('C:\\wamp\\php56\\ext', [], ['php_bz2.dll', 'php_com_dotnet.dll', 'php_curl.dll', 'php_enchant.dll', ...])
('C:\\wamp\\php56\\extras', ['ssl'], [])
('C:\\wamp\\php56\\extras\\ssl', [], ['openssl.cnf'])
('C:\\wamp\\php56\\lib', ['enchant'], [])
('C:\\wamp\\php56\\lib\\enchant', [], ['libenchant_ispell.dll', 'libenchant_myspell.dll'])
for current, subdirs, files in os.walk('C:\\wamp\\php56'): print('Текущая директория: ' + current) # цикл по поддиректориям текущей директории for subdir in subdirs: print(' Дочерняя директория: ' + subdir) # цикл по файлам текущей директории for file in files: print(' Файл в директории: ' + file)
Текущая директория: C:\wamp\php56 Дочерняя директория: dev Дочерняя директория: ext Дочерняя директория: extras Дочерняя директория: lib Файл в директории: deplister.exe Файл в директории: glib-2.dll Файл в директории: gmodule-2.dll ..... Текущая директория: C:\wamp\php56\dev Файл в директории: php5ts.lib Текущая директория: C:\wamp\php56\ext Файл в директории: php_bz2.dll Файл в директории: php_com_dotnet.dll Файл в директории: php_curl.dll ..... Текущая директория: C:\wamp\php56\extras Дочерняя директория: ssl Текущая директория: C:\wamp\php56\extras\ssl Файл в директории: openssl.cnf Текущая директория: C:\wamp\php56\lib Дочерняя директория: enchant Текущая директория: C:\wamp\php56\lib\enchant Файл в директории: libenchant_ispell.dll Файл в директории: libenchant_myspell.dll
Метод os.system() исполняет системную команду, возвращает код её завершения. Метод os.link() создает жесткую ссылку, os.symlink() создает символическую ссылку.
Модуль os.path
Модуль os.path встроен в модуль os и позволяет работать с путями к файлам и папкам. Основные свойства и методы:
os.path.sep— разделитель имен директорий в путиos.path.abspath()— преобразует относительный путь в абсолютныйos.path.isabs()— возвращаетTrue, если путь абсолютныйos.path.relpath(path, start)— возвращает относительный путь отstartкpathos.path.basename()— возвращает имя файла (или директории)os.path.dirname()— возвращает путь к файлу (или директории)os.path.exists()— возвращаетTrue, если файл (или директория) существуетos.path.isdir()— возвращаетTrue, если это директорияos.path.isfile()— возвращаетTrue, если это файлos.path.getsize()— возвращает размер файла в байтахos.path.join()— возвращает путь доступа, полученный конкатенацией аргументовos.path.split()— возвращает кортеж(os.path.dirname(), os.path.basename())
Поиск: Python • Директория • Копировать • Модуль • Удалить • Файл