python小程序:備份文件

設計程序,有如下步驟:python

  須要備份的文件和目錄由一個列表指定。linux

  備份應該保存在主備份目錄中。windows

  文件備份成一個zip文件。函數

  zip存檔的名稱是當前的日期和時間。oop

 

解決方案:優化

版本一:spa

 1 #!/usr/bin/python
 2 #filename: backup_ver1.py
 3 
 4 import os
 5 import time
 6 
 7 source=['/home/swaroop/byte','/home/swaroop/bin']
 8 target_dir='/mnt/e/backup/'
 9 target=target_dir+time.strftime('%Y%m%d%H%M%S')+'.zip'
10 zip_command="zip -qr '%s' %s"%(target,''.join(source))
11 
12 if os.system(zip_command)==0:
13     print 'Successful backup to',target
14 else:
15     print 'Backup FAILED'
16 
17 
18 #輸出
19 
20 $ pyhon backup_ver1.py
21 Successful backup to
22 /mnt/e/backup/20041208073244.zip

以上代碼裏,咱們在source列表中指定須要備份的文件和目錄,target_dir指定存儲備份文件的目標目錄,zip歸檔的名稱是目前的日期和時間。time.strftime()函數須要咱們在上面的程序中使用的那種定製。如,%Y被年份替代,%m被月份替代,其餘依次是日時分秒。zip命令有一些參數,-q表示zip命令安靜地工做。-r表示zip命令對目錄遞歸地工做,即它包括子目錄以及子目錄中的文件。選項後跟着zip歸檔的名稱,而後再是待備份的文件和目錄列表。咱們使用字符串join方法把source列表轉換爲字符串。最後os.system運行命令,成功則返回0,失敗則返回錯誤號。操作系統

 

版本二:設計

對前者的優化,採用更好的文件名機制--使用時間做爲文件名,日期做爲目錄名,存放於主備份目錄中。這樣更易於管理。同時,文件名得以變短。unix

代碼:

 1 #!/usr/bin/python
 2 #filename: backup_ver2.py
 3 
 4 import os
 5 import time
 6 
 7 source=['/home/swaroop/byte','/home/swaroop/bin']
 8 target_dir='/mnt/e/backup/'
 9 today=target_dir+time.strftime('%Y%m%d)
10 now=time.strftime('%H%M%S')
11 if not os.path.exists(today):
12     os.mkdir(today)
13     print 'Successfully created directory',today
14 target=today+os.sep+now+'.zip'
15 zip_command="zip -qr '%s' %s"%(target,''.join(source))
16 
17 if os.system(zip_command)==0:
18     print 'Successful backup to',target
19 else:
20     print 'Backup FAILED'
21 
22 
23 #輸出
24 
25 $ pyhon backup_ver2.py
26 Successfully created directory
27 /mnt/e/backup/20041208
28 Successful backup to
29 /mnt/e/backup/20041208/080020.zip
30 
31 $ pyhon backup_ver2.py
32 Successful backup to
33 /mnt/e/backup/20041208/080428.zip

使用os.exists函數檢驗在主備份目錄中是否有以當前日期做爲名稱的目錄,如果沒有,便使用os.mkdir函數建立。

注意os.sep的用法--這會根據你的操做系統給出目錄分隔符,即在linux、unix下它是'/',在windows下它是'\\',而在mac os下它是':'。os.sep有利於移植平臺。

 

版本三:

在zip歸檔的名稱上加一些用戶提供的註釋,便於區分不一樣備份的做用。

代碼:

 1 #!/usr/bin/python
 2 #filename: backup_ver2.py
 3 
 4 import os
 5 import time
 6 
 7 source=['/home/swaroop/byte','/home/swaroop/bin']
 8 target_dir='/mnt/e/backup/'
 9 today=target_dir+time.strftime('%Y%m%d)
10 now=time.strftime('%H%M%S')
11 comment=raw_input('Enter a comment --> ')
12 if len(comment)==0:
13     target=today+os.sep+now+'.zip'
14 else:
15     target=today+os.sep+now+'_'+\
16         comment.replace(' ','_')+'.zip'
17 if not os.path.exists(today):
18     os.mkdir(today)
19     print 'Successfully created directory',today
20 zip_command="zip -qr '%s' %s"%(target,''.join(source))
21 
22 if os.system(zip_command)==0:
23     print 'Successful backup to',target
24 else:
25     print 'Backup FAILED'
26 
27 
28 #輸出
29 
30 $ pyhon backup_ver3.py
31 Enter a comment --> added new examples
32 Successful backup to
33 /mnt/e/backup/20041208/082156_added_new_examples.zip
34 
35 $ pyhon backup_ver3.py
36 Enter a comment -->
37 Successful backup to
38 /mnt/e/backup/20041208/082316.zip

 

進一步優化:

改用tar命令

tar='tar -cvzf %s %s -X /home/swaroop/excludes.txt'%(targe,''.join(srcdir))

參數解釋:

-c表示建立一個歸檔
-v表示交互,即命令更具交互性
-z表示使用gzip濾波器
-f表示強迫建立歸檔,即若是已經有一個同名文件,它會被替換
-X表示含在指定文件名列表中的文件會被排除在備份以外。例如,你能夠在文件中指定*~,從而不讓備份包括全部以~結尾的文件。

最理想的建立這些歸檔的方法是分別使用zipfile和tarfile。不推薦使用os.system。

相關文章
相關標籤/搜索