http://blog.csdn.net/tiaotiaoyly/article/details/8587809
判断当前文件是否被直接执行,还是被当作模块加载
- os.chdir(os.path.dirname(os.path.abspath(os.path.join(os.getcwd(), __file__))))
设置默认字符串编码方式
- reload(sys)
- sys.setdefaultencoding('utf-8')
写文件
- def saveToFile(string, filePath):
- f = open(filePath, "wb") # "a" for append
- f.write(string)
- f.close()
遍历文件夹
- def scanDir(path):
- list = os.listdir(path)
- for item in list:
- filepath = os.path.join(path, item)
- print filepath
重定向输出
- class NoneOutput:
- def __init__(self):
- pass
- def write(self, s):
- pass
- def flush(self):
- pass
- logfile = open(os.path.join("./", "updatescan.log"), "w", 0)
- errfile = NoneOutput()
- sys.stdout = logfile
- sys.stderr = errfile
- #restore
- sys.stdout = sys.__stdout__
- sys.stderr = sys.__stderr__
打印堆栈信息
- <span style="font-weight: normal;">def traceback():
- import traceback
- return traceback.format_exc()</span>
- <span style="font-weight: normal;">def traceback():
- import traceback
- return traceback.format_exc()</span>
md5和sha1哈希算法
- def hash_sha1(content):
- import hashlib
- hash = hashlib.sha1(content)
- return hash.hexdigest()
- def hash_sha1_file(path):
- import hashlib
- hash = hashlib.sha1()
- file = open(path, "rb")
- hash.update(file.read())
- file.close()
- return hash.hexdigest()
- def hash_md5(content):
- import hashlib
- hash = hashlib.md5(content)
- return hash.hexdigest()
- def hash_md5_file(path):
- import hashlib
- hash = hashlib.md5()
- file = open(path, "rb")
- hash.update(file.read())
- file.close()
- return hash.hexdigest()
size,datetime,time 转换为便于阅读的字符串
- def readableDatetime(date = datetime.datetime.now(), format="%Y-%m-%d %H:%M:%S"):
- return date.strftime(format)
- def readableTime(time_second):
- units = ["sec", "min", "hour", "day"]
- scale = [60, 60, 24]
- t = float(time_second)
- for i in xrange(len(units)):
- if i < len(scale):
- s = scale[i]
- if not s or t < s:
- return "%.1f%s" % (t, units[i])
- t /= s
- <pre name="code" class="python">def readableSize(size):
- units = ["B", "K", "M", "G", "T"]
- size = float(size)
- for u in units:
- if size < 1024:
- return "%.1f%s" % (size, u)
- size /= 1024.0</pre>
- <pre></pre>
限定函数执行时间
- def timeout(timeout_second, func, args=(), kwargs={}, default=None):
- if args == None:
- args = ()
- if kwargs == None:
- kwargs = {}
- import threading
- class InterruptableThread(threading.Thread):
- def __init__(self):
- threading.Thread.__init__(self)
- self.result = default
- def run(self):
- self.result = func(*args, **kwargs)
- it = InterruptableThread()
- it.start()
- it.join(timeout_second)
- if it.isAlive():
- it._Thread__stop()
- return it.result
- else:
- return it.result
下载文件
- def downloadFile(url, path, urlCallback = None, timelimit = None):
- '''''callback(blockCount, blockSize, totalSize)'''
- import urllib
- import urllib2
- import httplib
- import os
- global last
- last = 0
- result = True
- try:
- mkdirIfNotExist(path)
- class AppURLopener(urllib.FancyURLopener):
- version = USER_AGENT
- urllib._urlopener = AppURLopener()
- if None == timelimit or timelimit <= 0:
- result = urllib.urlretrieve(url, path, urlCallback)
- else:
- result = timeout(timelimit, urllib.urlretrieve, (url, path, urlCallback))
- if None == result:
- print >>sys.stderr, "ERROR: Download timeout %s, url=%s" % (readableTime(timelimit), url)
- result = False
- #filename, info = urllib.urlretrieve(url, path, urlCallback)
- except urllib2.URLError, e:
- if hasattr(e, "code"):
- print >>sys.stderr, "ERROR: Url open failed, %s" % (str(e.code))
- result = False
- elif hasattr(e, "reason"):
- print >>sys.stderr, "ERROR: Url open failed, %s" % (str(e.reason))
- result = False
- except httplib.BadStatusLine, e:
- print >>sys.stderr, "ERROR: Url open failed, BadStatusLine error"
- result = False
- except Exception, e:
- print >>sys.stderr, "ERROR: Url open failed, unknown error,", e
- #print >>sys.stderr, traceback()
- result = False
- finally:
- if not result and os.path.exists(path):
- os.remove(path)
- return result
下载文件前获取文件大小
- def requestFileSize(url):
- import urllib2
- import httplib
- import os
- import sys
- try:
- 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'}
- #headers = {'User-Agent':USER_AGENT}
- request = urllib2.Request(url, headers = headers)
- response = urllib2.urlopen(request, timeout = 5)
- except urllib2.URLError, e:
- if hasattr(e, "code"):
- #print >>sys.stderr, "ERROR: Url open failed, %s, %s" % (str(e.code), url)
- return (None, str(e.code))
- elif hasattr(e, "reason"):
- #print >>sys.stderr, "ERROR: Url open failed, %s, %s" % (str(e.reason), url)
- return (None, str(e.reason))
- except httplib.BadStatusLine, e:
- #print >>sys.stderr, "ERROR: Url open failed, BadStatusLine error"
- return (None, "BadStatusLine")
- except:
- #print >>sys.stderr, "ERROR: Url open failed, unknown error"
- return (None, "Unknown")
发送邮件
- EMAIL_CONFIG = {
- 'mail_server':'smtp.163.com',
- 'mail_port':25,
- 'from_name':'myname@163.com',
- 'from_pwd':'123456',
- 'to_name_list':[
- 'somebody@gmail.com',
- ],
- }
- def send_email(subject, text, attachments=None, toNames=None):
- import os
- import smtplib
- import mimetypes
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- from email.mime.image import MIMEImage
- try:
- msg = MIMEMultipart()
- msg['From'] = EMAIL_CONFIG['from_name']
- if toNames != None:
- msg['To'] = ','.join(toNames)
- else:
- msg['To'] = ','.join(EMAIL_CONFIG['to_name_list'])
- msg['Subject'] = subject
- txt = MIMEText(text)
- msg.attach(txt)
- if attachments != None:
- for file in attachments:
- #path = os.path.join(os.getcwd(), file)
- path = file
- ctype, encoding = mimetypes.guess_type(path)
- if ctype is None or encoding is not None:
- ctype = 'application/octet-stream'
- maintype, subtype = ctype.split('/', 1)
- att = MIMEImage((lambda f: (f.read(), f.close()))(open(path, 'rb'))[0], _subtype = subtype)
- att.add_header('Content-Disposition', 'attachment', filename = path)
- msg.attach(att)
- server_mail = smtplib.SMTP()
- server_mail.connect(EMAIL_CONFIG['mail_server'], EMAIL_CONFIG['mail_port'])
- server_mail.login(EMAIL_CONFIG['from_name'],EMAIL_CONFIG['from_pwd'])
- server_mail.sendmail(EMAIL_CONFIG['from_name'], EMAIL_CONFIG['to_name_list'], msg.as_string())
- server_mail.quit()
- print 'send mail Ok'
- except Exception ,ex:
- print 'send email Error:'+str(ex)
- print traceback()
- return False
- return True
多线程工作
- def run():
- import threading
- import Queue
- global threads
- taskQueue = Queue.Queue()
- exitEvent = threading.Event()
- syncLock = threading.Semaphore()
- total = queryTasks()
- for i in range(threadCount):
- thread_id = len(threads)
- th = threading.Thread(target=downloadThread, args=(thread_id,))
- threads.append(th)
- th.start()
- time.sleep(.1)
- taskQueue.join()
- exitEvent.set()
- for th in threads:
- th.join()
- def downloadThread(thread_id):
- global taskQueue
- global syncLock
- global lastPingTime
- while not exitEvent.is_set():
- try:
- task = taskQueue.get(True, 1)
- except:
- time.sleep(1)
- continue
- try:
- # DO SOME WORK
- syncLock.acquire()
- try:
- # DO SOME SYNC THING
- finally:
- syncLock.release()
- # DO SOME WORK
- except Exception, e:
- #util.output("%s" % e, sys.stderr)
- #util.output(util.traceback(), sys.stderr)
- finally:
- taskQueue.task_done() # important
- time.sleep(1)
解压文件
- <pre name="code" class="python">def extractFile(filePath, innerFile, targetDir): #Linux
- import os
- targetFile = os.path.join(targetDir, innerFile)
- r = os.system('unzip -o "%s" "%s" -d "%s"' % (filePath, innerFile, targetDir))
- return r == 0
- def extractAllFiles(filePath, targetDir = None): #Linux
- from zipfile import ZipFile
- import os
- if targetDir == None:
- name, ext = os.path.splitext(filePath)
- dirname = os.path.dirname(filePath)
- targetDir = os.path.join(dirname, name)
- mkdirIfNotExist(targetDir, True)
- os.popen('unzip -o "%s" -d "%s"' % (filePath, targetDir))
- 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:
- 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):
- import os
- import platform
- def _unzipTestLinux(path):
- return os.system('unzip -t "%s"' % (filePath))
- def _unzipTestPython(path):
- from zipfile import ZipFile
- try:
- zip = ZipFile(path)
- if not zip:
- return False
- except:
- return False
- return True
- if platform.system() == "Linux":
- r = _unzipTestLinux(filePath)
- if r != 0:
- return _unzipTestPython(filePath)
- return r == 0
- else:
- return _unzipTestPython(filePath)</pre>
- <pre></pre>
- <br>
- <h3><a name="t17"></a>字符串编码转换</h3>
- <p></p><pre name="code" class="python">def encode_default(coding="utf-8"):
- import sys
- reload(sys)
- sys.setdefaultencoding(coding)
- def code_unicode(s):
- if not s:
- return None
- if isinstance(s, unicode):
- return s
- charsets = ["utf-8", "gbk", "big5", "windows-1252", "ascii"]
- for charset in charsets:
- try:
- s = s.decode(charset)
- except:
- pass
- else:
- break
- else:
- return None
- return s
- def code_utf8(s):
- s = code_unicode(s)
- if not s:
- return None
- try:
- s = s.encode("utf-8")
- except:
- return None
- return s</pre><br>
- <br>
- <p></p>
- <p></p>