2015-03-07 5 views
0

Так что я пытаюсь переместить все файлы, начинающиеся с «A» в определенную директорию. Теперь я сейчас в командной строке Windows не поддерживает этот метод:Перемещение файлов с подстановочными знаками в Python

move A* A_Dir 

Но может ли это в сочетании с Python найти способ? Или мне придется проходить через каждый отдельный файл? Такие, как:

contents=os.listdir('.') 
for file in content: 
    if file[0] == 'A': 
     os.system("move %s A_Dir" % file) 

... и т.д. Есть ли другое решение, что более проще и быстрее? -Спасибо!

+0

Если вы делаете это в Windows, используйте команду командного файла, это идеально подходит для этого. –

+0

Что будет выглядеть этот пакетный файл? –

ответ

2

В Windows: Этот пример перемещает файлы, начинающиеся с "A" из "C: \ 11" до "C: \ 2"

Вариант № 1: если вы используете пакетный файл, создавать пакетный файл (movefiles.bat), как показано ниже:

movefiles.bat:

move /-y "C:\11\A*.txt" "C:\2\" 

Выполнить этот пакетный файл из питона сценария, как показано ниже:

import os 
batchfile = "C:\\1\\movefiles.bat" 
os.system("%s" % batchfile) 

move command

Вариант № 2:с помощью Glob & shutil

import glob 
import shutil 
for data in glob.glob("C:\\11\\A*.txt"): 
    shutil.move(data,"C:\\2\\") 

Если мы хотим move все files и directory начиная с A:

import glob 
import shutil 

for data in glob.glob("C:\\11\\A*"): 
     shutil.move(data,"C:\\2\\") 

На основании комментария @eryksun, я добавил if not os.path.isdir(data):, если только files, начиная с буквы A, необходимо перенести, и в этом случае каталог будет проигнорирован.

import glob 
import shutil 
import os 
for data in glob.glob("C:\\11\\A*"): 
    if not os.path.isdir(data): 
     shutil.move(data,"C:\\2\\") 
+0

Встроенная команда 'move' cmd не соответствует нескольким каталогам с подстановочными знаками, поэтому' move A * A_Dir' перемещает только файлы, соответствующие 'A *'. Для эквивалента в Python вам необходимо отфильтровать каталоги из глобуса, например. '[f для f в glob.glob ('A *'), если не os.path.isdir (f)]'. – eryksun

+0

@eryksun - Спасибо! Вариант № 2 в данном ответе использует «glob» и «shutil». как вы думаете, мы должны обновить ответ, чтобы добавить 'if not os.path.isdir (f)' condition? – Vinkal

+0

BTW, я считаю, что нам не нужно ставить 'if not os.path.isdir (f)', поскольку в опции # 2 используется 'wild card'' A * .txt', он будет возвращать только файлы, начинающиеся с 'A' и имеющие' расширение .txt' и каталог будут проигнорированы. добровольно подтвердите, прежде чем перейти и обновить вариант № 2 в ответе – Vinkal

Смежные вопросы