Хелпикс

Главная

Контакты

Случайная статья





import os. import time. Замечание для пользователей Windows. import os. import time



import time

 

1. Ф а й л ы и к а т а л о г и, к о т о р ы е н е о б х о д и м о с к о п и р о в а т ь, с о б и р а ю т с я в с п и с о к.

 

source = ['" C: \\ My Documents" ', 'C: \\ Code']

 

З а м е т ь т е, ч т о д л я и м ё н, с о д е р ж а щ и х п р о б е л ы, н е о б х о д и м о и с п о л ь з о в а т ь

д в о й н ы е к а в ы ч к и в н у т р и с т р о к и.

2. Р е з е р в н ы е к о п и и д о л ж н ы х р а н и т ь с я в о с н о в н о м к а т а л о г е р е з е р в а.

 

target_dir = 'E: \\ Backup' # П о д с т а в ь т е т о т п у т ь, к о т о р ы й в ы б у д е т е и с п о л ь з о в а т ь.

 

3. Ф а й л ы п о м е щ а ю т с я в zip-а р х и в.

4. И м е н е м д л я zip-а р х и в а с л у ж и т т е к у щ а я д а т а и в р е м я.

 

target = target_dir + os. sep + time. strftime('%Y%m%d%H%M%S') + '. zip'

 

5. И с п о л ь з у е м к о м а н д у " zip" д л я п о м е щ е н и я ф а й л о в в zip-а р х и в

 

zip_command = " zip -qr {0} {1}". format(target, ' '. join(source))

 

З а п у с к а е м с о з д а н и е р е з е р в н о й к о п и и

 

if os. system(zip_command)==0:

 

print ('Р е з е р в н а я к о п и я у с п е ш н о с о з д а н а в ', target)

 

else:

 

print ('С о з д а н и е р е з е р в н о й к о п и и Н Е У Д А Л О С Ь ')

 

В ы в о д:

 

$ python3 backup_ver1. py

 

Р е з е р в н а я к о п и я у с п е ш н о с о з д а н а в E: \\Backup\\20080702185040. zip

 

Т е п е р ь н а с т у п а е т с т а д и я т е с т и р о в а н и я, к о г д а м ы п р о в е р я е м, п р а в и л ь н о л и р а б о т а е т н а -ш а п р о г р а м м а. Е с л и о н а р а б о т а е т н е т а к, к а к о ж и д а л о с ь, н а м п р и д ё т с я з а н я т ь с я е ё о т л а д -к о й (д е б а г о м )1, т. е. у с т р а н е н и е м б а г о в (о ш и б о к )в п р о г р а м м е.

 

Е с л и п р и в е д ё н н а я в ы ш е п р о г р а м м а у в а с н е з а р а б о т а е т, д о п и ш и т е print(zip_command) п р я м о п е р е д в ы з о в о м os. system и з а п у с т и т е п р о г р а м м у. П о с л е э т о г о с к о п и р у й т е в ы -в е д е н н у ю к о м а н д у “zip_command” и в с т а в ь т е е ё в к о м а н д н у ю с т р о к у, ч т о б ы п р о в е р и т ь, р а б о т а е т л и о н а к о р р е к т н о с а м а п о с е б е. Е с л и о н а н е с р а б а т ы в а е т, п р о в е р ь т е с п р а в к у п о

 

debug – п р и м е н и т е л ь н о к к о м п ь ю т е р н ы м п р о г р а м м а м о б о з н а ч а е т о т л а д к у (о б н а р у ж е н и е и у с т р а н е н и е о ш и б о к, к о т о р ы е п р и э т о м п р и н я т о н а з ы в а т ь «bug», т. е. «ж у к »). П о в с е й в и д и м о с т и, э т о б е р ё т с в о ё н а ч а л о

 

п р о ц е д у р ы и з г н а н и я н а с е к о м ы х и з с х е м б о л ь ш и х Э В М, х о т я с а м о п о н я т и е «bug» в с м ы с л е м а л е н ь к о й н е и с п р а в н о с т и в с т р е ч а е т с я и в б о л е е р а н н е й л и т е р а т у р е, н а п р и м е р, в з а п и с я х Т о м а с а Э д и с о н а 1878 г о д а. (п р и м. п е р е в. )


92                                                                                                                               Г л а в а 13. Р е ш е н и е з а д а ч


A Byte of Python (Russian), В е р с и я 2. 01

 

 

к о м а н д е “zip”, ч т о б ы в ы я с н и т ь, в ч ё м м о ж е т б ы т ь п р о б л е м а. Е с л и к о м а н д а у с п е ш н о в ы -п о л н я е т с я, п р о в е р ь т е, с о в п а д а е т л и в а ш а п р о г р а м м а н а Python в т о ч н о с т и с п р о г р а м м о й, п р и в е д ё н н о й в ы ш е.

 

К а к э т о р а б т а е т:

 

В ы з а м е т и л и, к а к м ы п р е в р а т и л и н а ш п р о е к т в к о д ш а г з а ш а г о м.

 

М ы и с п о л ь з о в а л и м о д у л и os и time, п р е д в а р и т е л ь н о и м п о р т и р о в а в и х. Д а л е е м ы у к а з а л и ф а й л ы и к а т а л о г и д л я р е з е р в н о г о к о п и р о в а н и я в с п и с к е source2. К а т а л о г н а з н а ч е н и я – э т о к а т а л о г, в к о т о р о м м ы с о х р а н я е м в с е р е з е р в н ы е к о -п и и, и о н у к а з ы в а е т с я в п е р е м е н н о й target_dir. И м е н е м zip-а р х и в а, к о т о р ы й м ы с о з д а ё м, б у д е т т е к у щ а я д а т а и в р е м я, к о т о р ы е г е н е р и р у ю т с я п р и п о м о щ и ф у н к ц и и time. strftime(). У н е г о б у д е т р а с ш и р е н и е . zip, и х р а н и т ь с я о н б у -д е т в к а т а л о г е target_dir.

 

О б р а т и т е в н и м а н и е н а у п о т р е б л е н и е п е р е м е н н о й os. sep – о н а с о д е р ж и т р а з -д е л и т е л ь п у т и д л я к о н к р е т н о й о п е р а ц и о н н о й с и с т е м ы, т. е. о н б у д е т '/' в GNU/Linux и Unix3, '\\' в Windows и ': ' в Mac OS. И с п о л ь з о в а н и е os. sep в м е -с т о э т и х с и м в о л о в н а п р я м у ю д е л а е т п р о г р а м м у п е р е н о с и м о й, и о н а с м о ж е т р а б о т а т ь н а в с е х э т и х о п е р а ц и о н н ы х с и с т е м а х.

 

Ф у н к ц и я time. strftime() п р и н и м а е т в к а ч е с т в е а р г у м е н т а ф о р м а т в ы в о д а в р е м е н и, н а п р и м е р, т а к о й, к а к м ы у к а з а л и в п р о г р а м м е в ы ш е. С и м в о л ф о р -м а т а %Y б у д е т з а м е щ ё н г о д о м и с т о л е т и е м. С и м в о л %m б у д е т з а м е щ ё н м е с я ц е м

 

ф о р м е ч и с л а о т 01 д о 12, и т а к д а л е е. П о л н ы й с п и с о к т а к и х с и м в о л о в ф о р -м а т а м о ж н о н а й т и в с п р а в о ч н и к е п о Python.

 

И м я к о н е ч н о г о zip-ф а й л а м ы с о з д а ё м п р и п о м о щ и о п е р а т о р а, к о т о р ы й с о е д и -н я е т с т р о к и, т. е. о б ъ е д и н я е т д в е с т р о к и и в о з в р а щ а е т н о в у ю. П о с л е э т о г о м ы с о з д а ё м с т р о к у zip_command, к о т о р а я с о д е р ж и т к о м а н д у, к о т о р у ю м ы н а м е р е -н ы в ы п о л н и т ь. П р о в е р и т ь, р а б о т а е т л и э т а к о м а н д а, м о ж н о з а п у с т и в е ё о т -д е л ь н о в к о м а н д н о й о б о л о ч к е (т е р м и н а л в GNU/Linux и л и к о м а н д н а я с т р о к а DOS).

 

К о м а н д а zip, к о т о р у ю м ы и с п о л ь з у е м, и м е е т н е к о т о р ы е п а р а м е т р ы. П а р а м е т р “-q” и с п о л ь з у е т с я д л я у к а з а н и я, ч т о к о м а н д а д о л ж н а с р а б о т а т ь т и х о 4. П а р а -м е т р “-r” о б о з н а ч а е т, ч т о к о м а н д а а р х и в а ц и и д о л ж н а р а б о т а т ь р е к у р с и в н о 5 д л я к а т а л о г о в, т. е. д о л ж н а в к л ю ч а т ь в с е п о д к а т а л о г и и ф а й л ы. О б а п а р а м е т р а о б ъ е д и н е н ы и у к а з а н ы в к р а т к о й ф о р м е “-qr”. З а п а р а м е т р а м и с л е д у е т и м я с о з д а в а е м о г о zip-а р х и в а, з а к о т о р ы м у к а з ы в а е т с я с п и с о к ф а й л о в и к а т а л о г о в д л я р е з е р в н о г о к о п и р о в а н и я. М ы п р е в р а щ а е м с п и с о к source в с т р о к у, и с п о л ь -з у я у ж е з н а к о м ы й н а м м е т о д join.

 

source – а н г л. «и с т о ч н и к » (п р и м. п е р е в. )

 

П о д с л о в о м «Unix» з д е с ь п о д р а з у м е в а ю т с я в с е о п е р а ц и о н н ы е с и с т е м ы, п о с т р о е н н ы е п о п р и н ц и п а м О С Unix, а н е т о л ь к о о н а с а м а п о с е б е. П р и м е р а м и т а к и х о п е р а ц и о н н ы х с и с т е м я в л я ю т с я в с е д и с т р и б у т и в ы

GNU/Linux, с е м е й с т в о О С *BSD, Android, Solaris и т. д. (п р и м. п е р е в. ) 4 q uietly –а н г л. «т и х о » (п р и м. п е р е в. )

5 r ecursive –а н г л. «р е к у р с и в н о » (п р и м. п е р е в. )


 

 

13. 2. Р е ш е н и е                                                                                                                                                                 93


A Byte of Python (Russian), В е р с и я 2. 01

 

 

З а т е м м ы, н а к о н е ц, в ы п о л н я е м к о м а н д у п р и п о м о щ и ф у н к ц и и os. system, к о -т о р а я з а п у с к а е т к о м а н д у т а к, к а к б у д т о о н а б ы л а з а п у щ е н а и з с и с т е м ы , т. е. и з к о м а н д н о й о б о л о ч к и. О н а в о з в р а щ а е т 0, е с л и к о м а н д а в ы п о л н е н а у с п е ш н о, в п р о т и в н о м с л у ч а е о н а в о з в р а щ а е т к о д о ш и б к и.

 

з а в и с и м о с т и о т в ы в о д а к о м а н д ы, м ы п е ч а т а е м с о о т в е т с т в у ю щ е е с о о б щ е н и е о т о м, у с п е ш н ы м б ы л о с о з д а н и е р е з е р в н ы х к о п и й и л и н е т.

 

В о т и в с ё, м ы с о з д а л и с ц е н а р и й д л я с о х р а н е н и я р е з е р в н ы х к о п и й н а ш и х в а ж -н ы х ф а й л о в!

 

З а м е ч а н и е д л я п о л ь з о в а т е л е й Windows

 

В м е с т о у п р а в л я ю щ е й п о с л е д о в а т е л ь н о с т и д л я о б р а т н о й н а к л о н н о й ч е р т ы м о г у т и с п о л ь з о в а т ь с я «с ы р ы е »6 с т р о к и. Н а п р и м е р, м о ж н о п и с а т ь “C: \\Documents” и л и “r'C: \Documents'”. О д н а к о, н е и с п о л ь з у й т е “'C: \Documents'”, т а к к а к в э т о м с л у ч а е о к а -ж е т с я, ч т о в ы п ы т а е т е с ь п р и м е н и т ь н е и з в е с т н у ю у п р а в л я ю щ у ю п о с л е д о в а т е л ь н о с т ь \D.

 

Т е п е р ь, к о г д а у н а с е с т ь р а б о ч и й с ц е н а р и й р е з е р в н о г о к о п и р о в а н и я, м ы м о ж е м и с п о л ь -з о в а т ь е г о д л я с о з д а н и я к о п и й н а ш и х ф а й л о в. П о л ь з о в а т е л я м GNU/Linux и Unix р е к о -м е н д у е т с я с д е л а т ь э т о т п р о г р а м м н ы й ф а й л и с п о л н и м ы м , ч т о б ы и м е т ь в о з м о ж н о с т ь з а -п у с к а т ь е г о в л ю б о е в р е м я и з л ю б о г о м е с т а. Э т о н а з ы в а е т с я о п е р а ц и о н н о й ф а з о й и л и р а з в ё р т ы в а н и е м п р о г р а м м ы.

 

П р о г р а м м а, п р и в е д ё н н а я в ы ш е, р а б о т а е т к о р р е к т н о, н о (о б ы ч н о ) п о н а ч а л у п р о г р а м м ы н е р а б о т а ю т т а к, к а к в ы т о г о о ж и д а е т е. П р о б л е м ы м о г у т в о з н и к а т ь в с л е д с т в и е н е п р а в и л ь -н о г о п р о е к т и р о в а н и я п р о г р а м м ы, д о п у щ е н и я о ш и б к и п р и н а б о р е п р о г р а м м н о г о к о д а

т. д. В т а к и х с л у ч а я х п р и х о д и т с я в о з в р а щ а т ь с я к с т а д и и п р о е к т и р о в а н и я и л и о т л а д к и п р о г р а м м ы.

 

 

13. 3 В т о р а я в е р с и я

 

П е р в а я в е р с и я н а ш е г о с ц е н а р и я р а б о т а е т. Т е м н е м е н е е, е г о м о ж н о у л у ч ш и т ь т а к, ч т о б ы б ы л о у д о б н е е п о л ь з о в а т ь с я в п о в с е д н е в н о й р а б о т е. Э т о н а з ы в а е т с я с т а д и е й п о д д е р ж к и п р о г р а м м ы.

 

О д н о и з у л у ч ш е н и й, п о к а з а в ш е е с я м н е п о л е з н ы м, – э т о л у ч ш и й м е х а н и з м и м е н о в а -н и я ф а й л о в: и с п о л ь з о в а н и е в р е м е н и в к а ч е с т в е и м е н и ф а й л а, с о х р а н я ю щ е г о с я в к а т а л о г

т е к у щ е й д а т о й в к а ч е с т в е и м е н и, к о т о р ы й в с в о ю о ч е р е д ь, р а с п о л о ж е н в г л а в н о м к а т а -л о г е д л я х р а н е н и я р е з е р в н ы х к о п и й. П е р в о е д о с т о и н с т в о э т о г о с о с т о и т в т о м, ч т о к о п и и х р а н я т с я в и е р а р х и ч е с к о й с т р у к т у р е, к о т о р о й л е г ч е у п р а в л я т ь. В т о р о е д о с т о и н с т в о – в т о м, ч т о и м е н а ф а й л о в н а м н о г о к о р о ч е. Т р е т ь е д о с т о и н с т в о с о с т о и т в т о м, ч т о п о и м е -н а м к а т а л о г о в м о ж н о л е г к о о п р е д е л и т ь, в к а к и е д н и с о з д а в а л и с ь р е з е р в н ы е к о п и и, т а к к а к к а т а л о г с о з д а ё т с я т о л ь к о в с л у ч а е р е з е р в н о г о к о п и р о в а н и я д а н н ы х в э т о т д е н ь.

 

С о х р а н и т е к а к backup_ver2. py:

 

raw – а н г л. «с ы р о й », «н е о б р а б о т а н н ы й » (п р и м. п е р е в )


 

94                                                                                                                               Г л а в а 13. Р е ш е н и е з а д а ч


A Byte of Python (Russian), В е р с и я 2. 01

 

import os

 

import time

 

1. Ф а й л ы и к а т а л о г и, к о т о р ы е н е о б х о д и м о с к о п и р о в а т ь, с о б и р а ю т с я в с п и с о к.

 

source = ['" C: \\ My Documents" ', 'C: \\ Code']

 

З а м е т ь т е, ч т о д л я и м ё н, с о д е р ж а щ и х п р о б е л ы, н е о б х о д и м о и с п о л ь з о в а т ь

д в о й н ы е к а в ы ч к и в н у т р и с т р о к и.

2. Р е з е р в н ы е к о п и и д о л ж н ы х р а н и т ь с я в о с н о в н о м к а т а л о г е р е з е р в а.

 

target_dir = 'E: \\ Backup' # П о д с т а в ь т е т о т п у т ь, к о т о р ы й в ы б у д е т е и с п о л ь з о в а т ь.

 

3. Ф а й л ы п о м е щ а ю т с я в zip-а р х и в.

4. Т е к у щ а я д а т а с л у ж и т и м е н е м п о д к а т а л о г а в о с н о в н о м к а т а л о г е

 

today = target_dir + os. sep + time. strftime('%Y%m%d')

 

Т е к у щ е е в р е м я с л у ж и т и м е н е м zip-а р х и в а

 

now = time. strftime('%H%M%S')

 

С о з д а ё м к а т а л о г, е с л и е г о е щ ё н е т

 

if not os. path. exists(today):

 

os. mkdir(today) # с о з д а н и е к а т а л о г а

 

print ('К а т а л о г у с п е ш н о с о з д а н ', today)

 

И м я zip-ф а й л а

 

target = today + os. sep + now + '. zip'

 

5. И с п о л ь з у е м к о м а н д у " zip" д л я п о м е щ е н и я ф а й л о в в zip-а р х и в

 

zip_command = " zip -qr {0} {1}". format(target, ' '. join(source))

 

З а п у с к а е м с о з д а н и е р е з е р в н о й к о п и и

 

if os. system(zip_command)==0:

 

print ('Р е з е р в н а я к о п и я у с п е ш н о с о з д а н а в ', target)

 

else:

 

print ('С о з д а н и е р е з е р в н о й к о п и и Н Е У Д А Л О С Ь ')

 

В ы в о д:

 

$ python3

backup_ver2. py

К а т а л о г у с п е ш н о с о з д а н E: \\Backup\\20080702

Р е з е р в н а я

к о п и я у с п е ш н о с о з д а н а в E: \\Backup\\20080702\\202311. zip
$ python3

backup_ver2. py

Р е з е р в н а я

к о п и я у с п е ш н о с о з д а н а в E: \\Backup\\20080702\\202325. zip

 

К а к э т о р а б о т а е т:

 

Б о л ь ш а я ч а с т ь п р о г р а м м ы о с т а л а с ь п р е ж н е й. Р а з н и ц а в т о м, ч т о т е п е р ь м ы п р о в е р я е м, с у щ е с т в у е т л и к а т а л о г с и м е н е м, с о о т в е т с т в у ю щ е м т е к у щ е й д а т е, в н у т р и г л а в н о г о к а т а л о г а д л я х р а н е н и я р е з е р в н ы х к о п и й. Д л я э т о г о м ы и с -

 

 

13. 3. В т о р а я в е р с и я

A Byte of Python (Russian), В е р с и я 2. 01

 

 

п о л ь з у е м ф у н к ц и ю os. path. exists. Е с л и о н н е с у щ е с т в у е т, м ы с о з д а ё м е г о ф у н к ц и е й os. mkdir.

 

 

13. 4 Т р е т ь я в е р с и я

 

В т о р а я в е р с и я у ж е у д о б н е е д л я р а б о т ы с б о л ь ш и м к о л и ч е с т в о м р е з е р в н ы х к о п и й. С д р у -г о й с т о р о н ы, к о г д а и х м н о г о, с т а н о в и т с я т р у д н о о т л и ч и т ь, к а к а я к о п и я д л я ч е г о. Н а п р и -м е р, м ы м о г л и в н е с т и з н а ч и т е л ь н ы е и з м е н е н и я в к а к у ю -т о п р о г р а м м у и л и п р е з е н т а -ц и ю, и т е п е р ь х о т и м у к а з а т ь с у т ь э т и х и з м е н е н и й в и м е н и zip-а р х и в а. Э т о г о л е г к о м о ж н о д о с т и ч ь д о б а в л е н и е м п о л ь з о в а т е л ь с к о г о к о м м е н т а р и я к и м е н и zip-а р х и в а.

 

П р и м е ч а н и е: С л е д у ю щ а я п р о г р а м м а н е р а б о т а е т, т а к ч т о н е п е р е ж и в а й т е, п р о с т о п р о -с л е д у й т е п о н е й, т а к к а к в н е й с о д е р ж и т с я у р о к.

 

С о х р а н и т е к а к backup_ver3. py

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.