Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Работа с именами файлов и каталогов




Работа с именами файлов и каталогов

Раз зашла речь о каталогах, я хочу обратить ваше внимание на модуль os. path. Он содержит функции для работы с именами файлов и каталогов.

> > > import os
> > > print(os. path. join('/Users/pilgrim/diveintopython3/examples/', 'humansize. py')) /Users/pilgrim/diveintopython3/examples/humansize. py [1]
> > > print(os. path. join('/Users/pilgrim/diveintopython3/examples', 'humansize. py')) /Users/pilgrim/diveintopython3/examples\humansize. py [2]
> > > print(os. path. expanduser('~')) c: \Users\pilgrim [3]
> > > print(os. path. join(os. path. expanduser('~'), 'diveintopython3', 'examples', 'humansize. py')) c: \Users\pilgrim\diveintopython3\examples\humansize. py [4]
  1. ↑ Функция os. path. join() составляет путь к каталогу из одного или нескольких частичных путей. В данном случае она просто соединяет строки.
  2. ↑ Это уже менее тривиальный случай. Функция join добавит дополнительную косую черту (slash) к имени папки перед тем как дописать имя файла. В данном случае Python добавляет обратную косую черту (backslash) вместо обыкновенной, потому что я запустил этот пример в Windows. Если вы введёте данную команду в Linux или Mac OS X, вы увидите простую косую черту. Python может обратиться к файлу независимо от того, какой разделитель используется в пути к файлу.
  3. ↑ Функция os. path. expanduser() раскрывает путь, в котором используется символ ~ для обозначения домашнего каталога текущего пользователя. Функция работает на любой платформе, где у пользователя есть домашний каталог, включая Linux, Mac OS X и Windows. Функция возвращает путь без косой черты в конце, но для функции os. path. join() это не имеет значения.
  4. ↑ Комбинируя эти две функции, вы можете легко строить файловые пути для папок и файлов в домашнем каталоге пользователя. Функция os. path. join() принимает любое количество аргументов. Я получил огромное удовольствие, когда обнаружил это, так как в других языках при разработке инструментальных средств мне приходилось постоянно писать глупую маленькую функцию addSlashIfNecessary(). В языке программирования Python умные люди уже позаботились об этом.

Модуль os. path также содержит функции для разбиения файловых путей, имён папок и файлов на их составные части.

> > > pathname = '/Users/pilgrim/diveintopython3/examples/humansize. py'
> > > os. path. split(pathname) ('/Users/pilgrim/diveintopython3/examples', 'humansize. py') [1]
> > > (dirname, filename) = os. path. split(pathname) [2]
> > > dirname '/Users/pilgrim/diveintopython3/examples' [3]
> > > filename 'humansize. py' [4]
> > > (shortname, extension) = os. path. splitext(filename) > > > shortname 'humansize' > > > extension '. py' [5]
  1. ↑ Функция split дробит полный путь и возвращает кортеж, содержащий отдельно путь до каталога и имя файла.
  2. ↑ Помните, я рассказывал про то, как присваивать несколько значений за раз и как вернуть одновременно несколько значений из функции? Функция os. path. split() действует именно так. Можно присвоить возвращаемое из функции split значение кортежу из двух переменных. Каждая из переменных примет значение соответствующего элемента результирующего кортежа.
  3. ↑ Первая переменная — dirname — получит значение первого элемента кортежа, возвращаемого функцией os. path. split(), а именно путь до каталога.
  4. ↑ Вторая переменная — filename — примет значение второго элемента кортежа, возвращаемого функцией os. path. split(), а именно имя файла.
  5. ↑ Модуль os. path также содержит функцию os. path. splitext(), которая дробит имя файла и возвращает кортеж, содержащий отдельно имя и отдельно расширение файла. Можно использовать ту же технику, что и ранее для присваивания каждого из интересующих значений отдельным переменным.

Получение содержимого каталога

Модуль glob понимает символы-джокеры, использующиеся в командных оболочках.

Модуль glob — это ещё один инструмент из стандартной библиотеки Python. Это простой способ программно получить содержимое папки, а также он умеет использовать символы-джокеры, с которыми вы наверняка знакомы, если работали в командной строке.

> > > os. chdir('/Users/pilgrim/diveintopython3/') > > > import glob
> > > glob. glob('examples/*. xml') ['examples\\feed-broken. xml', 'examples\\feed-ns0. xml', 'examples\\feed. xml'] [1]
> > > os. chdir('examples/') [2]
> > > glob. glob('*test*. py') ['alphameticstest. py', 'pluraltest1. py', 'pluraltest2. py', 'pluraltest3. py', 'pluraltest4. py', 'pluraltest5. py', 'pluraltest6. py', 'romantest1. py', 'romantest10. py', 'romantest2. py', 'romantest3. py', 'romantest4. py', 'romantest5. py', 'romantest6. py', 'romantest7. py', 'romantest8. py', 'romantest9. py'] [3]
  1. ↑ Модуль glob принимает шаблон, содержащий символы-джокеры, и возвращает пути всех файлов и каталогов, соответствующих ему. В этом примере шаблон содержит путь к каталогу и " *. xml", которому будут соответствовать все xml-файлы в каталоге examples.
  2. ↑ Теперь сделаем текущим рабочим каталог examples. Функция os. chdir() может принимать и относительные пути.
  3. ↑ Вы можете использовать несколько символов-джокеров в своём шаблоне. Этот пример находит все файлы в текущем рабочем каталоге, заканчивающиеся на. py и содержащие слово test где-нибудь в имени файла.
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...