os.listdir и glob.glob - аналогичные функции. Они оба возвращают списки файлов/dirs, поэтому они не принадлежат к одному циклу (по крайней мере, не так, как вы пытаетесь их использовать). Главное отличие заключается в том, что os.listdir просто берет каталог и возвращает в основном *.*
из него (минус и ..), где, поскольку glob.glob ожидает «шаблон глобирования», который может содержать *
?
[]
в формате с ограниченным регулярным выражением. Функция, о которой вы могли бы подумать здесь (вместо glob.glob), это fnmatch.fnmatch, которая применяет шаблон глобуса к одному имени файла.
os. listdir (path)
Верните список, содержащий имена записей в каталоге , заданный путем. Список находится в произвольном порядке. Он не включает специальные записи . ' и «..», даже если они присутствуют в каталоге .
Доступность: Unix, Windows.
Изменено в версии 2.3: В Windows NT/2k/XP и Unix, если путь является объектом Unicode, результатом будет список объектов Unicode. Неразрешимые имена файлов будут по-прежнему возвращаться в виде строки объектов.
глобальный. Глоб (путь к файлу)
Вернуть возможно пустой список имен путей, которые матч путь, который должен быть строкой, содержащей путь спецификации. pathname может быть либо абсолютным (например, /usr/src/Python-1.5/Makefile), либо относительным (например, ../../Tools/ / .gif), и может содержать подстановочные знаки в стиле оболочки. Разбитые символические ссылки включены в результаты (как в оболочке).
Извините, слишком ленив, чтобы на самом деле макетировать файлы и проверять это, но тогда я буду делать всю работу за вас. Но это должно работать (или быть штопором близко к тому, на что, как я думаю, вы стремитесь). ;)
import os
import fnmatch
import os.path
target = 'C:\Pics'
os.chdir(target)
allfiles = os.listdir(target)
count = 500
for filename in allfiles:
if not fnmatch.fnmatch(filename, '*.jpg'):
continue
if count % 500 == 0:
dirname = 'p%04d' % count
if not os.path.exists(dirname):
os.mkdir(dirname)
target = os.path.join(dirname, '%d.jpg' % count)
os.rename(filename, target)
count += 1
Спасибо. Можете ли вы внести некоторые изменения в мой код? –
+1, ваш более совершенен, удаляя мой, чтобы не загромождать вопрос. – Brady
спасибо, что вы были очень полезны –