Python shutil скопировать файлы из исходного каталога в удаленный каталог в зависимости от условия - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь скопировать файлы из исходного каталога в удаленный каталог, используя shutil(), однако мне нужно выполнить несколько проверок следующим образом.

  1. Не копируйте файл нулевого байта на пульт.

  2. Если файл уже завершен на удаленном компьютере, не копируйте его снова, если файл в источнике не изменил содержимое или не обновил.

  3. Я ищу каталог текущего месяца, поэтому перейдите к каталогу, если он доступен для текущего месяца, как это должно быть в январе для текущего месяца.

Импорт модулей:

import os
import glob
import shutil
import datetime

Переменная для выбора текущего месяца:

Info_month = datetime.datetime.now().strftime("%B")

Фрагмент кода:

for filename in glob.glob("/data/Info_month/*/*.txt"):
    if not os.path.exists("/remote/data/" + os.path.basename(filename)):
        shutil.copy(filename, "/remote/data/")

Приведенный выше код не принимает переменную Info_month Однако жесткое кодирование имени каталога работает.

У меня проблемы из-за недостатка знаний Python.

Как включить переменную Info_month в исходный каталог dir?

Как поставить флажок, чтобы не копировать файлы нулевого байта?

os.path.getsize(fullpathhere) > 0

Моя элементарная глупая логика:

for filename in glob.glob("/data/Info_month/*/*.txt"):
    if os.path.getsize(fullpathhere) > 0 :
        if not os.path.exists("/remote/data/" + os.path.basename(filename)):
            shutil.copy(filename, "/remote/data/")
    else:
        pass

1 Ответ

0 голосов
/ 09 января 2019

Вот исправление вашего существующего скрипта. Это еще не пытается реализовать логику «источник новее, чем цель», поскольку вы специально не спрашивали об этом, и это, возможно, уже слишком широко.

for filename in glob.glob("/data/{0}/*/*.txt".format(Info_month)):
    # The result of the above glob _is_ a full path
    if os.path.getsize(filename) > 0:
        # Minor tweak: use os.path.join for portability
        if not os.path.exists(os.path.join(["/remote/data/", os.path.basename(filename)])):
            shutil.copy(filename, "/remote/data/")
    # no need for an explicit "else" if it's a no-op
...