training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Модуль os Python

Создано: 17 сентября 2017Автор: Егор Астапов10724 просмотраСложность: легкий

Модуль os позволяет работать с файлами и папками. Русские названия файлов и папок возвращаются и принимаются всеми функциями этого модуля в кодировке UTF-8. Советую вам использовать функции для перекодирования строк - методы decode и encode.


# -*- coding: utf-8 -*-
import os

#выводим списком все переменные
arr = dict(os.environ)
print(arr)
'''
вы можете проверить железо вашего пользователя. 
Например архитектуру процессора. 
'''
print('Операционная система:', arr['OS'])


#название операционной системы
print(os.name)
'''
вывод: nt
nt - виндовс
'''

проверка прав доступа к файлу или папке.


#os.F_OK - проверка наличия пути
res = os.access(r'C:\Users\Егор\AppData\Local\Programs\Python', os.F_OK)
print ('проверка наличия пути:',res)
'''
вывод:
проверка наличия пути: True
'''

#os.R_OK - проверка на возможность чтения
res = os.access(r'C:\Users\Егор\AppData\Local\Programs\Python', os.R_OK)
print ('проверка на возможность чтения:',res)
'''
вывод:
проверка на возможность чтения: True
'''

#os.W_OK - проверка на возможность записи
res = os.access(r'C:\Users\Егор\AppData\Local\Programs\Python', os.W_OK)
print ('проверка на возможность записи:',res)
'''
вывод:
проверка на возможность записи: True
'''

#os.X_OK - проверка на возможность выполнения
res = os.access(r'C:\Users\Егор\AppData\Local\Programs\Python', os.X_OK)
print ('проверка на возможность выполнения:',res)
'''
вывод:
проверка на возможность выполнения: True
'''

для смены директории поможет функция


#смена текущей директории.
os.chdir(r'D:\test')
cur_dir = os.path.abspath(os.curdir)
print(cur_dir)
'''
вывод:
D:\test
'''

cur_dir = os.getcwd()
print(cur_dir)
'''
вывод:
D:\test
'''

Вы можете менять права доступа к файлу. Обратите внимание на то, что на операционной системе виндовс нельзя заблокировать просмотр файла. Вы не сможете изменить режим записи файла. В линукс довольно продвинутая файловая система. Там команда chmod имеет массу настроек. Смотрите статью как изменить права у файла при помощи chmod BASH


#Изменяет права доступа файла.
os.chmod(r'D:\test', 666)

#если не получится 666, то используйте  0o666
os.chmod(r'D:\test', 0o666)

# альтернатива chmod
subprocess.call("chmod 0755 " + file, shell=True)

Вы можете вывести названия всех файлов в виде списка. Функция listdir возвращает список имен файлов и папок в указанной папке.


arr = os.listdir(r'D:\test')
print(arr)
'''
вывод:
['python.txt', 'readme.txt']
'''

os.mkdir(path[, access=777]) cоздаёт папку по указанному пути


os.mkdir(r'D:\test\folder1', 777)
#Параметры:
#path (str) – путь к каталогу
#access – права доступа
print(os.listdir(r'D:\test'))
'''
вывод:
['folder1', 'python.txt', 'readme.txt']
'''

Аналогичен функции mkdir? но автоматический создает промежуточные папки. Вы можете создать массу промежуточных папок. В примере ниже создаются недостающие папки: folder, f1, f2


os.makedirs(r'D:\test\folder\f1\f2', 777)
print(os.listdir(r'D:\test'))
'''
вывод:
['folder', 'folder1', 'python.txt', 'readme.txt']
'''

Функция remove() позволяет удалить файл. Параметры: str – путь к файлу. Исключение: WindowsError – если файл удалить нельзя.


os.remove(r'D:\test\readme.txt')
print(os.listdir(r'D:\test'))
'''
вывод:
['folder', 'folder1', 'python.txt']
'''

Если вы ошибётесь с названием файла, то появится ошибка FileNotFoundError. Для перехвата ошибки используйте перехват исключений try except. Смотрите статью выброс и перехват исключений в Python.


try:
    os.remove(r'D:\test\readme.txt')
    print(os.listdir(r'D:\test'))
except FileNotFoundError as msg:
    print('неправильный путь к файлу:', msg)
'''
неправильный путь к файлу: [WinError 2] 
Не удается найти указанный файл: 'D:\\test\\readme.txt'
'''

rmdir(path) удаляет папку по указанному пути. Параметры: path (str) – путь к каталогу. Обратите внимание на то что удаление происходит только если папка пустая. Вы должны очистить папку и только потом удалять папку


os.rmdir(r'D:\test\folder1')
print(os.listdir(r'D:\test'))

'''
removedirs(path) - Аналогичен функции rmdir, но автоматический 
удаляет все родительские пустые папки 
на операционной системе виндовс эта функция странно работает. 
Пришлось удалить все дочерние файлы 
и только потом удалять родительскую папку.  
'''
#os.removedirs(r'D:\test\folder')
print(os.listdir(r'D:\test'))
'''
вывод:
['python.txt']
'''

os.rename(<старый файл/директория>, <новый файл/директория>). Функция os.rename() применяется тогда, когда нужно переименовать файл или папку. Посмотрите на пример.


os.rename(r'D:\test\python.txt', r'D:\test\python3.txt')
print(os.listdir(r'D:\test'))
'''
вывод:
['python3.txt']
'''

Метод startfile() позволяет нам «запустить» файл в привязанной к нему программе. Другими словами, мы можем открыть файл в соответствующей программе. Вы запускаете скрипт и открывается файл PDF. Он открывается в программе Adobe Reader. Происходит запуск файла как будто вы щелкнули двойным щелчком по файлу. Посмотрите на пример.


os.startfile(r'D:\test\yazyk_programmirovaniya_python.pdf')
'''
после того как скрип отработает, пройдёт несколько секунд и откроется файл 
в соответствующей программе.
'''

Метод os.walk() дает нам возможность для итерации на корневом уровне пути. Это значит, что мы можем назначить путь к этой функции и получить доступ ко всем её подкаталогам и файлам.


arr = os.walk(r'D:\test')
print(list(arr))
'''
вывод:
[('D:\\test', ['folder1'], ['python3.txt',\
 'Yazyk_programmirovaniya_Python.pdf']), 
('D:\\test\\folder1', ['folder2'], []), ('D:\\test\\folder1\\folder2', [], [])]
'''

В этом примере мы выведем циклом все файлы и каталоги


path = r'D:\test'
for root, dirs, files in os.walk(path):
    print('root:', root, 'dirs:', dirs, 'files:', files)
'''
вывод:
root: D:\test dirs: ['folder1'] files: ['python3.txt',\
 'Yazyk_programmirovaniya_Python.pdf']
root: D:\test\folder1 dirs: ['folder2'] files: []
root: D:\test\folder1\folder2 dirs: [] files: []
'''

В этом примере мы немного изменим цикл и выведем в виде дерева список файлов.


for root, dirs, files in os.walk(path):
    print(root)
    for _dir in dirs:
        print(_dir)

    for _file in files:
        print('|_',_file)
'''
вывод:
D:\test
folder1
|_ python3.txt
|_ Yazyk_programmirovaniya_Python.pdf
D:\test\folder1
folder2
D:\test\folder1\folder2
'''

os.path Подмодуль os.path модуля os имеет массу возможностей. Ознакомимся со следующими функциями:

  • basename - вернет название файла пути
  • dirname - возвращает только часть каталога пути
  • exists - проверяет существует ли файл, или нет. Необходимо указать ему путь
  • isdir and isfile - тестируют присутствие или отсутствие файлов или папок на тех или иных путях. Однако, isdir проверяет только пути к папкам, а isfile к файлам.
  • join - позволяет вам совместить несколько путей при помощи присвоенного разделителя. К примеру, в Windows, в роли разделителя выступает бэкслэш (косая черта, указывающая назад), однако в Linux функция разделителя присвоена косой черте, указывающей вперед (forward slash)
  • split - разъединяет путь на кортеж, который содержит и файл и каталог


#Функция basename вернет название файла пути.
filepath = os.path.basename(r'D:\Egor\обучение\python\script\module\os\os.py')
print('запускаемый скрипт:', filepath)
'''
вывод:
запускаемый скрипт: os.py
'''

Функция dirname возвращает только часть каталога пути.


filepath = os.path.dirname(r'D:\Egor\обучение\python\script\module\os\os.py')
print('путь до скрипта:', filepath)
'''
вывод:
путь до скрипта: D:\Egor\обучение\python\script\module\os
'''

Функция exists говорит нам, существует ли файл, или нет. Все что вам нужно, это указать ему путь.


filepath = os.path.exists(r'D:\Egor\обучение\python\script\module\os\os.py')
print('скрипт существует:', filepath)
'''
вывод:
скрипт существует: True
'''

Метод isdir связан с методом exists, так как он также тестируют присутствие или отсутствие файлов или папок на тех или иных путях. Однако, isdir проверяет только пути к папкам, Если вам нужно проверить путь, и не важно, папка это или файл, проще будет воспользоваться методом exists.


dir = os.path.isdir(r'D:\test')
print('такая папка существует:', dir)
'''
вывод:
такая папка существует: True
'''

Методы isfile проверяет путь к файлам.


dir = os.path.isfile(r'D:\test\python3.txt')
print('такой файл существует:', dir)
'''
вывод:
такой файл существует: True
'''

Метод join позволяет вам совместить несколько путей при помощи присвоенного разделителя. К примеру, в Windows, в роли разделителя выступает бэкслэш (косая черта, указывающая назад), однако в Linux функция разделителя присвоена косой черте, указывающей вперед (forward slash)


path = os.path.join(r'D:\test', 'python3.txt')
print(path)
'''
Вывод:
D:\test\python3.txt
'''

Метод split разъединяет путь на кортеж, который содержит каталог и файл.


arr_path = os.path.split(r'D:\test\python3.txt')
print(arr_path)
'''
вывод:
('D:\\test', 'python3.txt')
'''

обратите внимание на то, что функция не проверяет файл по типу. Если файл не указан, то функция вернёт предпоследнюю и последнюю директорию. В моём случае вернулись название диска и название последней папки.


arr_path = os.path.split(r'D:\test')
print(arr_path)
'''
вывод:
('D:\\', 'test')
'''

Вы можете передать значения сразу двум переменным. Функция возвращает кортеж из двух элементов.


dir_name, file_name = os.path.split(r'D:\test\python3.txt')
print('папка:', dir_name, 'название файла:', file_name)
'''
вывод:
папка: D:\test название файла: python3.txt
'''

Комментарии

реклама