检查指定文件是否存在:
import os os.path.isfile(fname) import os.path os.path.exists(file_path)
list合并的方法:
mergedlist = listone + listtwo
参考:http://stackoverflow.com/questions/1720421/merge-two-lists-in-python
Python中list和tuple的不同:
- http://stackoverflow.com/questions/626759/whats-the-difference-between-list-and-tuples
- 官方说明:ttps://docs.python.org/2/tutorial/datastructures.html#tuples-and-sequences
- http://jtauber.com/blog/2006/04/15/python_tuples_are_not_just_constant_lists/
- E-Scribe : Understanding tuples vs. lists in Python
- http://stackoverflow.com/questions/6063494/python-efficiency-lists-vs-tuples
Python返回内容的一些tips:
http://stackoverflow.com/questions/363944/python-idiom-to-return-first-item-or-none
Python的idioms:
http://stackoverflow.com/search?tab=votes&q=python%20idioms
Python的Luhn算法实现:
def luhn_checksum(card_number): def digits_of(n): return [int(d) for d in str(n)] digits = digits_of(card_number) odd_digits = digits[-1::-2] even_digits = digits[-2::-2] checksum = 0 checksum += sum(odd_digits) for d in even_digits: checksum += sum(digits_of(d*2)) return checksum % 10 def is_luhn_valid(card_number): return luhn_checksum(card_number) == 0
参考链接:
如何获取Python的迭代器的长度
刚才在看扫描MongoDB的未授权连接的代码时,看到的一段生成字典的Python片段,很给力啊,用到了Python的迭代器(itertools),然后在验证脚本效果的时候直接用了len()函数,没想到会报错“TypeError: object of type ‘generator’ has no len()”
网上搜索了之后找到解决办法,值得记录一下:
http://cn.bing.com/search?q=type+%27generator%27++len%28%29
import itertools def genBrute(chars, maxLen): return (''.join(candidate) for candidate in itertools.chain.from_iterable(itertools.product(chars, repeat=i) for i in range(1, maxLen + 1))) #print len(genBrute(chainSet,int(maxLen))) # TypeError: object of type 'generator' has no len() print len( list(genBrute(chainSet,int(maxLen))) )
打印list/tuple等可迭代对象(iterable)的一个tips
print "List of databases:" print "n".join(dbList) #之前的方法是手动for循环: for item in dbList: print item ''' 但是存在的问题在于: 1.代码不够简短; 2.没法指定分隔符(虽然可以在'print item'后面添加一个逗号,但不够方便) '''
在Python中如何判定一个对象是否为可迭代(iterable)的?
判定方法就是:
1.iter()函数
2.hasattr(object_name, ‘__iter__’)
3.引入collections中的方法
import collections if isinstance(theElement, collections.Iterable): # iterable else: # not iterable
#TODO:对大文件的处理(不读至内存,慢慢迭代) def fileToList(fileName): lineList = [] try: fileParser = open(fileName, 'r') except IOError as ioerr: print "[!] open file error: n " + str(ioerr) except: print "[!] can't access the file: %s " % fileName for line in fileParser: '''' 在Python中如何判断一个对象是"可迭代的" ''' newLine = line.strip() lineList.append(newLine) fileParser.close() return lineList
参考链接:
- In Python, how do I determine if an object is iterable? – Stack Overflow
- Understanding Python’s iterator, iterable, and iteration protocols — what exactly are they? – Stack Overflow
- https://docs.python.org/2/reference/datamodel.html#object.__iter__
- https://docs.python.org/2/library/stdtypes.html#iterator-types
用Python发送邮件_1
#!/usr/bin/env python # coding=utf-8 import smtplib from email.Message import Message import time def sendMail(user, passwd): systemTime=time.strftime('%Y-%m-%d',time.localtime(time.time())) try: fileObj=open(r"F:xianguo.opml", "r") content=fileObj.read() except: print "Cannot read filen" exit() message = Message() message['Subject'] = 'Connect test' message['From'] = user message['To'] = "[email protected]" message.set_payload("The time ist"+systemTime+"n"+content) msg = message.as_string() smtp = smtplib.SMTP("smtp.126.com", port=25, timeout=20) #sm.set_debuglevel(1) #开启debug模式 #smtp.starttls() #使用安全连接 #smtp.ehlo() smtp.login(user, passwd) smtp.sendmail(user, "[email protected]", msg) time.sleep(5) #避免邮件没有发送完成就调用了quit() smtp.quit() if __name__=="__main__": emailName="[email protected]" emailPasswd="haha,man." sendMail(emailName, emailPasswd)
用Python发送邮件_2
#!/usr/bin/env python # coding = utf-8 import smtplib from email.mime.text import MIMEText import urllib2 import json import time url = "http://www.v2ex.com/api/topics/hot.json" user_name = "[email protected]" passwd = "password" smtp_serv = "smtp.126.com" send_to = "[email protected]" class SendMail: def __init__(self, username, passwd, serv_addr): self.__username = username self.__passwd = passwd self.__serv = smtplib.SMTP(serv_addr, port=25, timeout=20) def __login(self): self.__serv.login(self.__username, self.__passwd) def sendmsg(self, mail_to, subject, content): self.__login() msg = MIMEText(content) msg['Subject'] = subject msg['From'] = self.__username msg['To'] = mail_to self.__serv.sendmail(self.__username, mail_to, msg.as_string()) self.__serv.quit() def build_msg(): res = urllib2.urlopen(url).read() json_res = json.loads(res) msg = [] id = 0 for top in json_res: id = id + 1 msg.append(str(id)+": ") msg.append(top['url'].encode('utf-8')) msg.append("rnrn") msg.append("Title: ") msg.append(top['title'].encode('utf-8')) msg.append("rnrn") msg.append("Content: ") msg.append(top['content'].encode('utf-8')) msg.append("rnrn") return msg if __name__ == "__main__": send = SendMail(user_name, passwd, smtp_serv) today = time.strftime("%Y-%m-%d", time.localtime(time.time())) title = "v2ex top 10 @ " + today print title msg = build_msg() str_msg = ''.join(msg) send.sendmsg(send_to, title, str_msg)