Python代码整理 2012

http://blog.csdn.net/tiaotiaoyly/article/details/8587809

判断当前文件是否被直接执行,还是被当作模块加载

[python]  view plain copy
  1. if __name__ == "__main__":  
  2.     main()  

将工作目录(current work path)切换到当前脚本文件所在的目录

[python]  view plain copy
  1. os.chdir(os.path.dirname(os.path.abspath(os.path.join(os.getcwd(), __file__))))  


设置默认字符串编码方式

[python]  view plain copy
  1. reload(sys)  
  2. sys.setdefaultencoding('utf-8')   

写文件

[python]  view plain copy
  1. def saveToFile(string, filePath):  
  2.     f = open(filePath, "wb")    # "a" for append  
  3.     f.write(string)  
  4.     f.close()  


遍历文件夹

[python]  view plain copy
  1. def scanDir(path):  
  2.     list = os.listdir(path)  
  3.     for item in list:  
  4.         filepath = os.path.join(path, item)  
  5.         print filepath  


重定向输出

[python]  view plain copy
  1. class NoneOutput:    
  2.     def __init__(self):    
  3.         pass  
  4.     def write(self, s):  
  5.         pass  
  6.     def flush(self):    
  7.         pass  
  8.   
  9. logfile = open(os.path.join("./""updatescan.log"), "w"0)  
  10. errfile = NoneOutput()  
  11. sys.stdout = logfile  
  12. sys.stderr = errfile  
  13.   
  14. #restore  
  15. sys.stdout = sys.__stdout__  
  16. sys.stderr = sys.__stderr__  


打印堆栈信息

[python]  view plain copy
  1. <span style="font-weight: normal;">def traceback():  
  2.     import traceback  
  3.     return traceback.format_exc()</span>  

md5和sha1哈希算法

[python]  view plain copy
  1. def hash_sha1(content):  
  2.     import hashlib  
  3.     hash = hashlib.sha1(content)  
  4.     return hash.hexdigest()  
  5.       
  6. def hash_sha1_file(path):  
  7.     import hashlib  
  8.     hash = hashlib.sha1()  
  9.     file = open(path, "rb")  
  10.     hash.update(file.read())  
  11.     file.close()  
  12.     return hash.hexdigest()  
  13.       
  14. def hash_md5(content):  
  15.     import hashlib  
  16.     hash = hashlib.md5(content)  
  17.     return hash.hexdigest()  
  18.   
  19. def hash_md5_file(path):  
  20.     import hashlib  
  21.     hash = hashlib.md5()  
  22.     file = open(path, "rb")  
  23.     hash.update(file.read())  
  24.     file.close()  
  25.     return hash.hexdigest()  

size,datetime,time 转换为便于阅读的字符串

[python]  view plain copy
  1. def readableDatetime(date = datetime.datetime.now(), format="%Y-%m-%d %H:%M:%S"):  
  2.     return date.strftime(format)  
  3.       
  4. def readableTime(time_second):  
  5.     units = ["sec""min""hour""day"]  
  6.     scale = [606024]  
  7.     t = float(time_second)  
  8.     for i in xrange(len(units)):  
  9.         if i < len(scale):  
  10.             s = scale[i]  
  11.         if not s or t < s:  
  12.             return "%.1f%s" % (t, units[i])  
  13.         t /= s  
  14.   
  15. <pre name="code" class="python">def readableSize(size):  
  16.     units = ["B""K""M""G""T"]  
  17.     size = float(size)  
  18.     for u in units:  
  19.         if size < 1024:  
  20.             return "%.1f%s" % (size, u)  
  21.         size /= 1024.0</pre>  
  22. <pre></pre>  

限定函数执行时间

[python]  view plain copy
  1. def timeout(timeout_second, func, args=(), kwargs={}, default=None):  
  2.     if args == None:  
  3.         args = ()  
  4.     if kwargs == None:  
  5.         kwargs = {}  
  6.     import threading  
  7.     class InterruptableThread(threading.Thread):  
  8.         def __init__(self):  
  9.             threading.Thread.__init__(self)  
  10.             self.result = default  
  11.         def run(self):  
  12.             self.result = func(*args, **kwargs)  
  13.     it = InterruptableThread()  
  14.     it.start()  
  15.     it.join(timeout_second)  
  16.     if it.isAlive():  
  17.         it._Thread__stop()  
  18.         return it.result  
  19.     else:  
  20.         return it.result  

下载文件

[python]  view plain copy
  1. def downloadFile(url, path, urlCallback = None, timelimit = None):  
  2.     '''''callback(blockCount, blockSize, totalSize)'''  
  3.     import urllib  
  4.     import urllib2  
  5.     import httplib  
  6.     import os  
  7.     global last  
  8.     last = 0  
  9.     result = True  
  10.     try:  
  11.         mkdirIfNotExist(path)  
  12.         class AppURLopener(urllib.FancyURLopener):  
  13.             version = USER_AGENT  
  14.         urllib._urlopener = AppURLopener()  
  15.         if None == timelimit or timelimit <= 0:  
  16.             result = urllib.urlretrieve(url, path, urlCallback)  
  17.         else:  
  18.             result = timeout(timelimit, urllib.urlretrieve, (url, path, urlCallback))  
  19.         if None == result:  
  20.             print >>sys.stderr, "ERROR: Download timeout %s, url=%s" % (readableTime(timelimit), url)  
  21.             result = False  
  22.         #filename, info = urllib.urlretrieve(url, path, urlCallback)  
  23.     except urllib2.URLError, e:  
  24.         if hasattr(e, "code"):  
  25.             print >>sys.stderr, "ERROR: Url open failed, %s" % (str(e.code))  
  26.             result = False  
  27.         elif hasattr(e, "reason"):  
  28.             print >>sys.stderr, "ERROR: Url open failed, %s" % (str(e.reason))  
  29.             result = False  
  30.     except httplib.BadStatusLine, e:  
  31.         print >>sys.stderr, "ERROR: Url open failed, BadStatusLine error"  
  32.         result = False  
  33.     except Exception, e:  
  34.         print >>sys.stderr, "ERROR: Url open failed, unknown error,", e  
  35.         #print >>sys.stderr, traceback()  
  36.         result = False  
  37.     finally:  
  38.         if not result and os.path.exists(path):  
  39.             os.remove(path)  
  40.     return result  

下载文件前获取文件大小

[python]  view plain copy
  1. def requestFileSize(url):  
  2.     import urllib2  
  3.     import httplib  
  4.     import os  
  5.     import sys  
  6.       
  7.     try:  
  8.         headers={'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}  
  9.         #headers = {'User-Agent':USER_AGENT}  
  10.         request = urllib2.Request(url, headers = headers)  
  11.         response = urllib2.urlopen(request, timeout = 5)  
  12.     except urllib2.URLError, e:  
  13.         if hasattr(e, "code"):  
  14.             #print >>sys.stderr, "ERROR: Url open failed, %s, %s" % (str(e.code), url)  
  15.             return (None, str(e.code))  
  16.         elif hasattr(e, "reason"):  
  17.             #print >>sys.stderr, "ERROR: Url open failed, %s, %s" % (str(e.reason), url)  
  18.             return (None, str(e.reason))  
  19.     except httplib.BadStatusLine, e:  
  20.         #print >>sys.stderr, "ERROR: Url open failed, BadStatusLine error"  
  21.         return (None"BadStatusLine")  
  22.     except:  
  23.         #print >>sys.stderr, "ERROR: Url open failed, unknown error"  
  24.         return (None"Unknown")  


发送邮件

[python]  view plain copy
  1. EMAIL_CONFIG = {  
  2.     'mail_server':'smtp.163.com',  
  3.     'mail_port':25,  
  4.     'from_name':'myname@163.com',  
  5.     'from_pwd':'123456',  
  6.     'to_name_list':[  
  7.        'somebody@gmail.com',   
  8.     ],  
  9. }  
  10.   
  11. def send_email(subject, text, attachments=None, toNames=None):  
  12.     import os  
  13.     import smtplib  
  14.     import mimetypes  
  15.     from email.mime.text import MIMEText    
  16.     from email.mime.multipart import MIMEMultipart    
  17.     from email.mime.image import MIMEImage  
  18.     try:  
  19.         msg = MIMEMultipart()  
  20.           
  21.         msg['From'] = EMAIL_CONFIG['from_name']  
  22.         if toNames != None:  
  23.             msg['To'] = ','.join(toNames)  
  24.         else:  
  25.             msg['To'] = ','.join(EMAIL_CONFIG['to_name_list'])  
  26.         msg['Subject'] = subject  
  27.           
  28.         txt = MIMEText(text)  
  29.         msg.attach(txt)  
  30.           
  31.         if attachments != None:  
  32.             for file in attachments:  
  33.                 #path = os.path.join(os.getcwd(), file)  
  34.                 path = file  
  35.                 ctype, encoding = mimetypes.guess_type(path)    
  36.                 if ctype is None or encoding is not None:    
  37.                     ctype = 'application/octet-stream'    
  38.                 maintype, subtype = ctype.split('/'1)    
  39.                 att = MIMEImage((lambda f: (f.read(), f.close()))(open(path, 'rb'))[0], _subtype = subtype)    
  40.                 att.add_header('Content-Disposition''attachment', filename = path)    
  41.                 msg.attach(att)  
  42.           
  43.         server_mail = smtplib.SMTP()  
  44.         server_mail.connect(EMAIL_CONFIG['mail_server'], EMAIL_CONFIG['mail_port'])  
  45.         server_mail.login(EMAIL_CONFIG['from_name'],EMAIL_CONFIG['from_pwd'])  
  46.         server_mail.sendmail(EMAIL_CONFIG['from_name'], EMAIL_CONFIG['to_name_list'], msg.as_string())  
  47.         server_mail.quit()  
  48.         print 'send mail Ok'  
  49.     except Exception ,ex:  
  50.         print 'send email Error:'+str(ex)  
  51.         print traceback()  
  52.         return False  
  53.     return True  


多线程工作

[python]  view plain copy
  1. def run():  
  2.     import threading  
  3.     import Queue  
  4.     global threads  
  5.     taskQueue = Queue.Queue()  
  6.     exitEvent = threading.Event()  
  7.     syncLock = threading.Semaphore()  
  8.     total = queryTasks()  
  9.     for i in range(threadCount):  
  10.         thread_id = len(threads)  
  11.         th = threading.Thread(target=downloadThread, args=(thread_id,))  
  12.         threads.append(th)  
  13.         th.start()  
  14.         time.sleep(.1)  
  15.     taskQueue.join()  
  16.     exitEvent.set()  
  17.     for th in threads:  
  18.         th.join()  
  19.   
  20. def downloadThread(thread_id):  
  21.     global taskQueue  
  22.     global syncLock  
  23.     global lastPingTime  
  24.     while not exitEvent.is_set():  
  25.         try:  
  26.             task = taskQueue.get(True1)  
  27.         except:  
  28.             time.sleep(1)  
  29.             continue  
  30.         try:  
  31.             # DO SOME WORK  
  32.             syncLock.acquire()  
  33.             try:  
  34.                 # DO SOME SYNC THING  
  35.             finally:  
  36.                 syncLock.release()  
  37.             # DO SOME WORK  
  38.   
  39.         except Exception, e:  
  40.             #util.output("%s" % e, sys.stderr)  
  41.             #util.output(util.traceback(), sys.stderr)  
  42.         finally:  
  43.             taskQueue.task_done()   # important  
  44.             time.sleep(1)  


解压文件

[python]  view plain copy
  1. <pre name="code" class="python">def extractFile(filePath, innerFile, targetDir):    #Linux  
  2.     import os  
  3.     targetFile = os.path.join(targetDir, innerFile)  
  4.     r = os.system('unzip -o "%s" "%s" -d "%s"' % (filePath, innerFile, targetDir))  
  5.     return r == 0  
  6.   
  7. def extractAllFiles(filePath, targetDir = None):    #Linux  
  8.     from zipfile import ZipFile  
  9.     import os  
  10.     if targetDir == None:  
  11.         name, ext = os.path.splitext(filePath)  
  12.         dirname = os.path.dirname(filePath)  
  13.         targetDir = os.path.join(dirname, name)  
  14.     mkdirIfNotExist(targetDir, True)  
  15.     os.popen('unzip -o "%s" -d "%s"' % (filePath, targetDir))  
  16.     return targetDir</pre>def extractFileWithPythonZip(filePath, innerFile, targetDir): import os targetFile = os.path.join(targetDir, innerFile) mkdirIfNotExist(targetDir, targetFile) from zipfile import ZipFile try: zip = ZipFile(filePath) if not zip: #print "ERROR:  
  17.  Zip file not found path=%s" % (filePath) return False zip.extract(innerFile, targetDir) except Exception, e: #print "ERROR: Unzip failed! path=%s, %s" % (filePath, e) return False if not os.path.exists(targetFile): return False return targetFile<pre name="code" class="python">def unzipTest(filePath):  
  18.     import os  
  19.     import platform  
  20.       
  21.     def _unzipTestLinux(path):  
  22.         return os.system('unzip -t "%s"' % (filePath))  
  23.           
  24.     def _unzipTestPython(path):  
  25.         from zipfile import ZipFile  
  26.         try:  
  27.             zip = ZipFile(path)  
  28.             if not zip:  
  29.                 return False  
  30.         except:  
  31.             return False  
  32.         return True  
  33.       
  34.     if platform.system() == "Linux":  
  35.         r = _unzipTestLinux(filePath)  
  36.         if r != 0:  
  37.             return _unzipTestPython(filePath)  
  38.         return r == 0  
  39.     else:  
  40.         return _unzipTestPython(filePath)</pre>  
  41. <pre></pre>  
  42. <br>  
  43. <h3><a name="t17"></a>字符串编码转换</h3>  
  44. <p></p><pre name="code" class="python">def encode_default(coding="utf-8"):  
  45.     import sys  
  46.     reload(sys)  
  47.     sys.setdefaultencoding(coding)  
  48.       
  49. def code_unicode(s):  
  50.     if not s:  
  51.         return None  
  52.     if isinstance(s, unicode):  
  53.         return s  
  54.     charsets = ["utf-8""gbk",  "big5""windows-1252""ascii"]  
  55.     for charset in charsets:  
  56.         try:  
  57.             s = s.decode(charset)  
  58.         except:  
  59.             pass  
  60.         else:  
  61.             break  
  62.     else:  
  63.         return None  
  64.     return s  
  65.   
  66. def code_utf8(s):  
  67.     s = code_unicode(s)  
  68.     if not s:  
  69.         return None  
  70.     try:  
  71.         s = s.encode("utf-8")  
  72.     except:  
  73.         return None  
  74.     return s</pre><br>  
  75. <br>  
  76. <p></p>  
  77. <p></p>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值