21

Re: Дитячий Python/Django

anakin написав:

Заучувати не треба, досить знати де шукати. Копіпаст не зло, якщо ви його розумієте. На практиці, усім пофігу що і як ви там понаписували якщо воно справно робить (тим паче на python).
"Досить спроб. Просто бий.".

Ну... А звідки візьметься розуміння написаного якщо не буде власної практики написання коду? А для власної практики недостатньо знати службові слова і значення слів змінна, цикл, метод і т.д. Потрібна ще правильно налаштована логіка,що б знати/розуміти,що в якій послідовності за чим має йти.

Подякували: leofun011

22

Re: Дитячий Python/Django

Ви самі відповіли на своє запитання - потрібно багато писати та мати правильно налаштовану логіку, а спершу курка (алгоритми/математика) чи яйце (інструмент/python), це ви самі повинні вирішити, бо у всіх по своєму.
Незнання електротехніки мені не завадило виявити пузаті кондери у БП монітора (це ж треба уміти розібрати), поїхати купити нові (а тут номінали у мікрофарадах), та успішно їх перепаяти (ну це взагалі дупа).

Менше зайвих думок про організацію процесу, просто робіть і не рівняйтесь на "ідеального програміста", всеодно знайдеться той, хто робить краще, та й сама думка пригнічує та робить байдужим.

Подякували: VertoX, 0xDADA11C7, leofun013

23 Востаннє редагувалося VertoX (13.05.2016 20:39:35)

Re: Дитячий Python/Django

Цей код не працював доки я сам не створив на диску теку backup

import os
import time

source = ["~/p3", "~/lessons"]
target_dir = "~/backup"
target = target_dir + os.sep + time.strftime("%Y%m%d%H%M%S") + ".zip"
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

if os.system(zip_command) == 0:
    print("Копіювання пройшло вдало", target)
else:
    print("Помилка при створенні копії")

Але з цим прикладом подібна фішка не канає! Як виправити ситуацію?

import os
import time

source = ["~/p3", "~/lessons"]
target_dir = "~/backup"

today = target_dir + os.sep + time.strftime("%Y%m%d")
now = time.strftime("%H%M%S")

if not os.path.exists(today):
    os.mkdir(today)
print("Тека створена", today)

target = today + os.sep + now + ".zip"
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

if os.system(zip_command) == 0:
    print("Копію вдало створено у теці", target)
else:
    print("Копіювання не відбулося")

24

Re: Дитячий Python/Django

А хіба today != True: не буде завжди істинним (рядок, навіть порожній не дорівнює булевському True) незалежно від того, чи є на дискові щось з таким іменем?
Треба через os.path.exists() перевірити, чи є об’єкт і через os.path.isdir() чи воно каталог, чи є файл з таким іменем і все одно нічого не вийде. Або навпаки, через isdir перевірити, чи є каталог, а якщо нема — подивитися, чи не зайнято ім’я файлом.

25

Re: Дитячий Python/Django

Виправив! Спершу воно й було реалізовано через - if not os.path.exists(today), все одно не працювало!

26

Re: Дитячий Python/Django

1) позбавитися ~

today = os.path.expanduser(target_dir) + os.sep + time.strftime("%Y%m%d")

або

os.mkdir(os.path.expanduser(today))

2) якщо треба створити всі проміжні каталоги, а не лише листовий, то os.makedirs

today = os.path.expanduser(today)
if not os.path.exists(today) : os.makedirs(today)
Подякували: VertoX1

27

Re: Дитячий Python/Django

@Vertox

# if os.system(zip_command) == 0:
if not os.system(zip_command):

# замiсть тiльди (~) краще все ж
os.environ["HOME"]

28

Re: Дитячий Python/Django

І все ж таки я голосую за os.path.expanduser() :-)
«ніколи не кажи ніколи» — наприклад, що програма ніколи не запускатиметься під іншими ОС або що ніколи вона не ускладниться так, що дасть користувачу (хоч би і тому, хто сам її писав, але виступає в ролі користувача) задати вручну будь-який каталог, а він з розгону ~ і напише.

Post's attachments

py27home.png 15.5 kb, 194 downloads since 2016-05-16 

29

Re: Дитячий Python/Django

Bartash написав:

@Vertox

# if os.system(zip_command) == 0:
if not os.system(zip_command):

# замiсть тiльди (~) краще все ж
os.environ["HOME"]

На юнікс-подібних систмах тильда й HOME працюють приблизно однаково, наскільки я розумію. На вінді тильда не має сенсу, а HOME треба попередньо прописати самому, щоб це мало взагалі якийсь ефект.

30

Re: Дитячий Python/Django

P.Y. написав:

На вінді тильда не має сенсу

Тільда і в лінуксі має сенс лише в командному рядку, bash перетворює і передає у програму вже нормальний шлях від кореня. З програми, як видно з обговорення, тільда вже не має сенсу.

Тобто в пітон-програмі тільда як така не має сенсу ні в лінуксі, ніі у віндовсі, але системно-залежним чином розгортається у потрібний каталог — os.path.expanduser() у він комбінує наявні у він HOMEDRIVE і HOMEPATH у потрібний каталог, на скріншоті у попередньому моєму повідомленні це показано.

31

Re: Дитячий Python/Django

питання на засипку :

d = {}
d[True] = 'true'
d[(1,)] ='tuple'
d[None] = 'none'
print(len(d))

буде помилка чи надрукує якесь число?