开发者社区> 问答> 正文

分享一段python程序

很方便操作自己的存储空间

1: #coding=utf8
   2: from oss_api import *
   3: from oss_xml_handler import *
   4: import os
   5: import sys
   6:  
   7: HOST="storage.aliyun.com"
   8: ACCESS_ID = ""
   9: SECRET_ACCESS_KEY = ""
  10:  
  11: class OssFS:
  12:     def __init__(self, oHost, oId="", oKey=""):
  13:         self.oHost = oHost
  14:         self.oId = oId
  15:         self.oKey = oKey
  16:         self.oss = OssAPI(oHost,oId,oKey)
  17:         self.buckets = []
  18:         res = self.oss.list_all_my_buckets()
  19:         http_body = res.read()
  20:         if 2 == (res.status/100):
  21:             bucket_list = GetServiceXml(http_body)
  22:             for bucket in bucket_list.list():
  23:                 (h1,h2) = bucket
  24:                 self.buckets.append(str(h1))
  25:         else:
  26:                 print http_body
  27:  
  28:     def show_buckets(self):
  29:         '''Show all buckets'''
  30:         for each in self.buckets:
  31:             print each
  32:  
  33:     def sizetoKMGT(self,snum):
  34:         '''convert size number to KB/MB/GB/TB'''
  35:         if 0 == int(snum):
  36:             return "obj grp"
  37:         lsize = ['Bytes', 'KB', 'MB', 'GB', 'TB']
  38:         i = 0
  39:         snum = int(snum) * 1.0
  40:         while snum >; 1024:
  41:             snum = snum / 1024.0
  42:             i  = 1;
  43:         return ('%.2f'   " "  lsize)%(snum)
  44:  
  45:  
  46:     def show_objects(self, bucket = '', path = ''):
  47:         '''Show all objects in the path from the bucket'''
  48:         res = self.oss.list_bucket(bucket)
  49:         http_body = res.read()
  50:         if 2 == (res.status / 100):
  51:             h = GetBucketXml(http_body)
  52:             (file_list ,common_list) = h.list()
  53:             for each in file_list:
  54:                 (fname, ctime, etag, fsize, owner, owner2, fstyle) = each
  55:                 print "s\t %s\t %s" % (str(fname),self.sizetoKMGT(fsize),etag)
  56:         else:
  57:             print http_body
  58:  
  59:     def file_upload(self, bucket='' ,path='' ,file_name=''):
  60:         '''Upload a file from local PC to the OSS'''
  61:         res = self.oss.put_object_from_file(bucket, file_name, file_name)
  62:         if 2 == (res.status/100):
  63:             print "Success to upload the file: "   file_name
  64:             return True
  65:         else:
  66:             print res.read()
  67:    
  68:     def is_file(self, bucket, file_name):
  69:         '''Wether the file_name is in the bucket or not'''
  70:         res = self.oss.list_bucket(bucket)
  71:         http_body = res.read()
  72:         if 2 ==(res.status / 100):
  73:             h = GetBucketXml(http_body)
  74:             (file_list, common_list) = h.list()
  75:             for each in file_list:
  76:                 fname = str(each[0])
  77:                 if fname == file_name:
  78:                     return True
  79:             return False
  80:  
  81:     def file_download(self, bucket, file_name):
  82:         '''Download the file(file_name) from the bucket'''
  83:         res = self.get_object_to_file(bucket, file_name, file_name)
  84:         if 2 == (res.status / 100):
  85:             print "Get file: " file_name
  86:         else:
  87:             print res.read()
  88:    
  89:     def file_delete(self, bucket, file_name):
  90:         '''Delete the file(file_name) from the bucket'''
  91:         res = self.oss.object_operation("DELETE", bucket, file_name)
  92:         if 2 == (res.status/100):
  93:             print "Success to delete the file: "   file_name
  94:             return True
  95:         else:
  96:             print res.read()
  97:             return False
  98:  
  99: if __name__=="__main__":
100:     isRoot = True;
101:     #isRoot wether is root floder
102:     uBucket = ''
103:     uPath = ''
104:     uFs = OssFS(HOST,ACCESS_ID,SECRET_ACCESS_KEY)
105:  
106:     print "==============================================="
107:     while True:
108:         strCmd = raw_input("Input your command:")
109:         cmd = strCmd.split(' ')
110:  
111:         if "ls" == cmd[0]:
112:             if 1 == len(cmd):
113:                 if True == isRoot:
114:                     uFs.show_buckets()
115:                     continue
116:                 else:
117:                     uFs.show_objects(uBucket,uPath)
118:                     continue
119:             elif 2 == len(cmd):
120:                 if "local" == cmd[1]:
121:                     for each in os.listdir('.'):
122:                         print each
123:                     continue
124:                 else:
125:                     print ">>>ERROR: BAD option! (Try \"ls local\")"
126:                     continue
127:  
128:         elif "cd" == cmd[0]:
129:             if len(cmd) != 2:
130:                 print ">>>ERROR: BAD option! (Bucket name or file name need)"
131:                 continue
132:             else:
133:                 if '.' == cmd[1]:
134:                     continue
135:                 elif '..' == cmd[1]:
136:                     if True == isRoot:
137:                         print "Root already"
138:                     else:
139:                         isRoot = True
140:                         continue
141:                 else:
142:                     if False == isRoot:
143:                         print ">>>ERROR BAD bucket, you are in bucket already"
144:                         continue
145:                     uBucket = cmd[1]
146:                     if uBucket not in uFs.buckets:
147:                         print ">>>ERROR BAD bucket" uBucket " is not in your buckets"
148:                         continue
149:                     isRoot = False
150:                     continue
151:  
152:         elif "put" == cmd[0]:
153:             if True == isRoot:
154:                 print ">>>ERROR: BAD PATH (you must cd a bucket first )"
155:                 continue
156:             if len(cmd) != 2:
157:                 print ">>>ERROR: BAD option! (put a file one time)"
158:                 continue
159:             else:
160:                 file_name = cmd[1]
161:                 if os.path.isfile(file_name):                    #file exist
162:                     uFs.file_upload(uBucket,uPath,file_name)
163:                     continue
164:                 else:
165:                     print ">>>ERROR: BAD file name (file not exist!)"
166:                     continue
167:  
168:         elif "get" == cmd[0]:
169:             if len(cmd) !=2:
170:                 print ">>>ERROR: BAD option"
171:                 continue
172:             if True == isRoot:
173:                 print ">>>ERROR: BAD get, access a bucket first"
174:                 continue
175:             file_name = cmd[1]
176:             if False == uFs.is_file(uBucket, file_name):
177:                 print file_name   " is not in your bucket"   uBucket
178:                 continue
179:             uFs.file_download(uBacket,file_name)    #didnot consider the file has already exist
180:             continue
181:        
182:         elif "delete" == cmd[0]:
183:             if True == isRoot:
184:                 print ">>>BAD delete, I will not let you delete your bucket!"
185:                 continue
186:             if len(cmd) != 2:
187:                 print ">>>BAD options"
188:                 continue
189:             file_name = cmd[1]
190:             if False == uFs.is_file(uBucket, file_name):
191:                 print file_name   " is not in your bucket"   uBucket
192:                 continue
193:             uFs.file_delete(uBucket, file_name)
194:             continue
195:            
196:         elif "help" == cmd[0]:
197:             pass
198:             continue
199:  
200:         elif "quit" == cmd[0]:
201:             break
202:  
203:         else:
204:             print "Unable to recognize your command!"
205:             continue
206:     print "==============================================="


原文有些长就不贴了
http: //www.dullgull.com/2012/07/阿里云存储服务oss-api(python)/




展开
收起
ap7699a0v 2012-07-13 15:01:25 13105 0
3 条回答
写回答
取消 提交回答
  • Re分享一段python程序
    不错的分享。
    2013-01-02 14:23:15
    赞同 展开评论 打赏
  • Re分享一段python程序
    有无.net的程序代码?
    2013-01-01 01:42:35
    赞同 展开评论 打赏
  • 2012-07-13 16:09:57
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载