Преобразование скрипта создания пакетной папки в python - PullRequest
0 голосов
/ 08 июля 2019

Я делаю программу на python, которая перемещает определенные папки в разные каталоги.В настоящее время я использую старые пакетные сценарии, которые прекрасно работают, но мне интересно, как сделать именно эти вещи в Python, а не пакетные, поэтому мне не нужно вызывать .bat файлы.В конце концов я хотел бы поместить все это в один .py и создать из него .exe.

Вот что я пытаюсь преобразовать:

Этот скрипт перемещает некоторые изфайлы (мой python выводит в файл notes.txt)

for /F "delims=" %%a in (notes.txt) do robocopy /s /MOVE "C:\Users\koka\Documents\Python Scripts\%%a" "C:\Users\koka\Desktop\OUTPUT\%%a\Notes"
pause

И затем этот скрипт перемещает оставшуюся часть файлов:

dir /b /ad > modmovelist.txt
for /F "delims=" %%a in (modmovelist.txt) do robocopy /s /MOVE
"C:\Users\koka\Documents\Python Scripts\%%a" "C:\Users\koka\Desktop\OUTPUT\%%a\Mods"

Наконец, этот скрипт будет проходить через всепапки и очистите его, добавив все недостающие папки, которые я хочу, под каждым "%% a".

set homepath=C:\Users\koka\Desktop\Basics
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Emails"    mkdir "%homepath%\%%G\Emails"
)
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Notes" mkdir "%homepath%\%%G\Notes"
)
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Mods" mkdir "%homepath%\%%G\Mods"
)

Программа выполняется в порядке, указанном выше.Что меня смущает, так это то, что я не могу понять, как объяснить "%% a" - это будет другой цикл for?Должно быть и чистое решение для репликации команды dir.

Как я могу преобразовать все это в чистый Python?

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Вы можете использовать shutil.move(src, dst), чтобы рекурсивно переместить файл или каталог src в другое место dst.

Например, ваш первый сценарий может быть записан как:

#!/usr/bin/python
import shutil

# Read from notes file
notes = open("notes.txt").read().splitlines()

# Loop through notes file
for n in notes:
    shutil.move("Python Scripts/" + n, "OUTPUT/" + n + "/Notes")

Похоже, что ваш второй пакетный сценарий похож по своей природе, поэтому смоделируйте его после этого.

Для последнего пакетного сценария вам не нужно иметь три отдельных цикла for для каждогодействие.Вместо этого соберите все действия в одно:

set homepath=C:\Users\koka\Desktop\Basics
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Emails"    mkdir "%homepath%\%%G\Emails"
    if not exist "%homepath%\%%G\Notes" mkdir "%homepath%\%%G\Notes"
    if not exist "%homepath%\%%G\Mods" mkdir "%homepath%\%%G\Mods"
)

Что касается python, вы можете сделать это:

#!/usr/bin/python
import os

homepath = "Basics"

# Just get the directories within the homepath
directories = next(os.walk(homepath))[1]

for d in directories
    if not os.path.exists(homepath + "/" + d + "/Emails")
        os.mkdir(homepath + "/" + d + "/Emails")
    if not os.path.exists(homepath + "/" + d + "/Notes")
        os.mkdir(homepath + "/" + d + "/Notes")
    if not os.path.exists(homepath + "/" + d + "/Mods")
        os.mkdir(homepath + "/" + d + "/Mods")
0 голосов
/ 08 июля 2019

попробуйте поискать методы 'os' в одиночку с 'glob' и 'shutil'. Эти методы позволят вам перемещаться по системе dir вашего компьютера и работать с файлами. Вам придется импортировать их, чтобы использовать их следующим образом: import os, import shutil, import glob.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...