Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2019 15:39:09

Mutant
Зарегистрирован: 2019-08-18
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Задать путь через переменную

В общем пытаюсь решить такую задачку. На диске С создается папка с текущей датой, так же на диске D. На диске С, в созданной папке, я создал несколько текстовых файлов (вручную), теперь их необходимо скопировать в папку с текущей датой на диске D. Во теперь вопрос, чтобы скопировать файлы нужно прописать путь (от куда и куда), но можно ли эти пути записать в переменные или с помощью форматирования строк подставить и скопировать файлы. Так как эту операцию нужно проделывать каждый день на автомате, а если писать весь путь (а дата как мы знаем меняется каждый день), то придется вручную дату изменять в пути.

Отредактировано Mutant (Авг. 18, 2019 15:39:46)

Прикреплённый файлы:
attachment Снимок.PNG (10,6 KБ)

Офлайн

#2 Авг. 18, 2019 16:00:01

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Задать путь через переменную

забавно вы код показываете, так наверное лучше будет

 import os 
import time h
import shutil as s
source2 = 'C:' 
source2 = 'D:'
today = sourcel + os.sep + time.strftime('IY %m %d') 
today2 = source2 + os.sep + time.strftime('%Y %m %d')
#os.mkdir (today)
#os.mkdir (today2)
source3 = today 
source4 = today2 
#open('source','w') 
s.copyfile(source3,source4)
а по вашей задече, вариантов масса что бы сделать то что задумали
зы задача не полная
1. вы собираетесь синхранезировать содержимое каталогов или перемещать файлы из каталога А в каталог Б
2. что бы вы там не задумали когда вы собераетесь это делать (1 раз в сутки, 2 раза, при изменении содержимого каталога А, по требованию пользователя, еще что то)




1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 18, 2019 16:25:43)

Офлайн

#3 Авг. 18, 2019 18:29:45

Mutant
Зарегистрирован: 2019-08-18
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Задать путь через переменную

Перемещать файлы

Офлайн

#4 Авг. 18, 2019 20:11:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Задать путь через переменную

Mutant
чтобы скопировать файлы
Mutant
Перемещать файлы
Вы уж определитесь копировать или перемещать. Это далеко не одно и тоже. Вообще всякого рода бекапы архивирование делаются средствами командного интерпретатора ОС в одну-две строчку, питон тут совершенно не нужен.



Офлайн

#5 Авг. 19, 2019 07:55:38

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Задать путь через переменную

Mutant
еремещать файлы
как то так, ну такое, на коленке …
 ;cfg.ini
[cfg]
source = /home/qwerty/Рабочий стол/A
backup = /home/qwerty/Рабочий стол/B

 #python 2.x
#запускать один раз в сутки
import os, time, ConfigParser, shutil
class MyDir():
    def __init__(self):
        self.cfg = ConfigParser.ConfigParser()
        self.cfg.read("cfg.ini")
        self.root = self.cfg.get("cfg", "source")
        self.in__root = os.listdir(self.root)
        self.source = os.path.join(self.root, time.strftime('%Y_%m_%d'))
        self.out = self.myFunk()
    def myFunk(self):
        if  len(self.in__root) == 0:
            os.mkdir(self.source)
            return "1 ===>"
        else:
            try:
                shutil.move(os.path.join(self.root, self.in__root[0]),
                                    self.cfg.get("cfg", "backup"))
                os.mkdir(self.source)
                return "2 :::>"
            except shutil.Error as it__err:
                return "3 ~~~> " + str(it__err)
            finally:
                print("fine")
if __name__ == "__main__":
    print(MyDir().out)
тупой вариант без проверок и обработки исключений итд (критика эээ и советы приветствуются)
зы вам как поиграться или для дела? если для дела см. вариант выше (doza_and), вы же не будете полнстью на питоне эмулировать системные утилиты? хотя как хотите.



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 19, 2019 09:24:02)

Офлайн

#6 Авг. 19, 2019 09:51:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Задать путь через переменную

AD0DE412
критика эээ и советы приветствуются
1. А чего на питоне 2?? он уже того…
2. Создание одного объекта явный признак того что класс тут не нужен.
3.
 self.in__root[0]
непонятно почему обрабатывается 1 элемент.
4. При аварийном сохранении я думаю большинство людей не ожидает что файлы исчезнут (те copy уместнее move). Я бы рекомендовал архивировать результат или модулем zip или системными утилитами.



Отредактировано doza_and (Авг. 19, 2019 09:56:22)

Офлайн

#7 Авг. 19, 2019 11:17:21

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Задать путь через переменную

doza_and
1. А чего на питоне 2?? он уже того…
эт не критично там различий то … просто 2 под рукой был
doza_and
2. Создание одного объекта явный признак того что класс тут не нужен
то же верно но, вдруг он(а) расширять будет функционал (сомительно) классы для меня новая тема вот и осаиваю тему (в них удобно зворачивать всякое имена итд без всякого ООП даже)
doza_and
непонятно почему обрабатывается 1 элемент.
автору темы нужно перемещение вот и мы этого того его перемещаем, зачем лишнее. кроме того в try - except - finally можно накрутить разное (возможно это будет переусложнение, скорее всего так и есть)
doza_and
Я бы рекомендовал архивировать результат или модулем zip или системными утилитами.
кто ж спорит (зачем чинить исправное, можешь не писать не пиши итд)
я даже не исключаю что есть в природе как ой то модуль для backup -ов с чаем и плюшками


зы только сейчас дошло
doza_and
непонятно почему обрабатывается 1 элемент.
… ммм … подразумевается что в корневом каталоге А только 1 элемент который перемещается в каталог B, ежесуточно. (такие вещи надо документировать)
для меня было бы позновательно как ой код был бы правильный с вашей точки зрения



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 19, 2019 12:00:36)

Офлайн

#8 Авг. 22, 2019 12:04:19

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Задать путь через переменную

 ;cfg.ini
[cfg]
source = path/A
backup = path/B
trick = it.txt

 # coding: utf-8
#-------------------------------------------------------------------------------
# Name: xz
#-------------------------------------------------------------------------------
# запускать один раз в сутки на NT платформе (хотя хз можно и больше, просто
#  скрипт будет все переносить из каталога A/data в каталог B/data
#  после чего снова создавать каталог A/data)
# хз как будт вести себя с кирилецей, спецсимволами итд, cмд оно такое
#-------------------------------------------------------------------------------
# скрипт создает каталог с текущей датой в указоном каталоге "source"
# (есле его еще нет) и копирует в другой указанный каталог "backup", каталоги с
# именами указанными в it.txt (куда записваются все созданые каталоги скриптом)
# после чего удаляет все коталоги с этим именами из исходного каталога "source".
# используются cmd windows (xcopy, rd)
# в каталоге скрипта должен быть файл it.txt
#-------------------------------------------------------------------------------
# 1. А чего на питоне 2?? он уже того…
# >>> ok python 3.x
import os, time, configparser
# 2 .Создание одного объекта явный признак того что класс тут не нужен
# >>> ok no comment oлл охладите он верхнем уровне модуль все
inifile = r"cfg.ini"
cfg = configparser.ConfigParser()
cfg.read(inifile)
root1 = cfg.get("cfg", "source")
root2 = cfg.get("cfg", "backup")
log = cfg.get("cfg", "trick")
in__root1 = os.listdir(root1)
name = time.strftime('%Y_%m_%d')
source = os.path.join(root1, name)
# 3. непонятно почему обрабатывается 1 элемент.
# >>> ok тут такое, как бы ok, чё, норм.
# 4. При аварийном сохранении я думаю большинство людей не ожидает что файлы
# исчезнут (те copy уместнее move). Я бы рекомендовал архивировать результат
# или модулем zip или системными утилитами.
# >>> ok, но архивировать архилонг -о, поэтому будем ближе к системе и ее утилитам
# ... непонятный момент, вы и в правду считаете, что при перемещении файлов
# ... при сбое файлы исчезнут, в обоих каталогах (0_0)!? че, правда
def sourceCopyDel(A, B):
    print("(0_0)!?")
    if os.name == "nt":
        name = os.path.join(B, os.path.basename(A))
        try:
            os.mkdir(name[:-1])
        except:
            print("err2")
        itcopy = " ".join(["XCOPY", r"/E /S",
         '\"' + A[:-1] + '\"',
         '\"' + name[:-1] + '\"'])
        itdel = " ".join(["RD", r"/S /Q", "".join(['\"', A[:-1], '\"'])])
        code = os.system(itcopy)
        if code == 0:
            print(os.system(itdel))
        else:
            print(code)
    else:
        print("it will work in only windows")
def writeLog():
    if os.path.isfile(log):
        logfile = open(log, "a")
    else:
        logfile = open(log, "w")
    logfile.write(name + "\n")
    logfile.close()
def main():
    if not name[:-1] in in__root1:
        [sourceCopyDel(os.path.join(root1, i), root2) for i in open(log)]
        try:
            os.mkdir(source)
        except:
            print("err")
        writeLog()
    else:
        [sourceCopyDel(os.path.join(root1, i), root2) for i in open(log)]
if __name__ == '__main__':
    main()
"""
зы кстате, сложно было перестраиваться обратно в безклассовость,
мне не пондддравилось ... полностью.
"""



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Авг. 22, 2019 12:29:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version