Искать файлы с расширением и копировать в каталог в Python? - PullRequest
1 голос
/ 29 октября 2011

Я довольно новичок в Python и пытаюсь создать базовую программу резервного копирования, которая позволит мне искать файлы с определенным расширением (в данном случае, .doc) по всему домашнему диску компьютер, а затем скопировать в заранее определенный каталог (так как программа будет запускаться с USB). У меня есть справка по некоторым основным командам ввода / вывода, но у меня немало трудностей с этим.
Может ли кто-нибудь со временем помочь мне с этим?

Спасибо за ваше время,
Лиам.

1 Ответ

2 голосов
/ 29 октября 2011

Чтобы изучить файловую систему, вы можете попробовать os.walk.Он будет рекурсивно следовать за каталогом, выдавая список файлов и каталогов в каждом каталоге.

Например, при заданной структуре каталогов:

.
├── baz
│   └── bif
│       ├── bang
│       └── file1.doc
└── foo
    ├── bar
    │   └── file3.doc
    └── file2.doc

Этот код:

import os

print list(os.walk('.'))  # walk current (.) directory

Создает что-то вроде этого:

[('.', ['baz', 'foo'], []),
 ('./baz', ['bif'], []),
 ('./baz/bif', ['bang'], ['file1.doc']),
 ('./baz/bif/bang', [], []),
 ('./foo', ['bar'], ['file2.doc']),
 ('./foo/bar', [], ['file3.doc'])]

Затем вы можете просмотреть результаты и скомпилировать список файлов для копирования.

Для копирования файлов пакет shutilимеет copy, который просто принимает пути к файлам src / dest.Для получения дополнительной информации см. Документы: http://docs.python.org/library/shutil.html

Редактировать

Более полезные вещи для поиска файлов включают в себя:

  • The globпакет: Как следует из названия, соответствие файла стиля глобуса (* .txt, . и т. д.).Я не верю, что это поддерживает рекурсивный поиск, хотя.В этом примере, если я сделаю glob('foo/*.doc'), я получу результат ['foo/file2.doc'].
  • fnmatch из пакета fnmatch, который может сопоставить шаблон стиля glob со строками.Пример fnmatch('foo.txt', '*.txt') Вернет True
...