有意思的记录-python
1.变量
类变量紧接在类名后面定义,相当于java和c++的static变量
实例变量在init里定义,相当于java和c++的普通变量
2.日期
#coding:utf-8 import time import datetime #日期格式化,time.strftime(format[, t]), #输出:2015-08-28 15:50:51 currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #日期加减,输出:2015-08-27 yesterday = datetime.date.today() - datetime.timedelta(days=1) print yesterday.strftime("%Y-%m-%d") #日期字符串转化为时间戳time.strptime(string[, format]) #struct_time格式:time.struct_time(tm_year=2015, tm_mon=3, tm_mday=12, tm_hour=15, tm_min=1, tm_sec=1, tm_wday=3, tm_yday=71, tm_isdst=-1) #秒数: timeStruct = time.strptime("2015-03-12 15:01:01", '%Y-%m-%d %H:%M:%S') #返回秒数:1426143661.0 seconds = time.mktime(timeStruct) print seconds
3.json
json.dumps(obj)JSON转为字符串 json.loads(str)字符串转为JSON
4.文件读写
queryFile = open('top_query') for line in queryFile: print line queryFile.close() queryFile = open('top_query', 'w') queryFile.write("miphone" + "\n") queryFile.close()
5.字符串编辑距离
编辑距离也称为Levenshtein距离,用于衡量两个字符串的相似度,一个字符串向另一个字符串变化经历的操作(新增/删除/替换字符)次数。python提供官方库python-levenshtein,使用如下。
import Levenshtein #输出2,abc:b替换为f得afc,删除c得af,两次操作 Levenshtein.distance("abc", "af") #ratio函数获得小于1的小数,更直观的衡量相似度,1完全相同,0是完全不同 #计算公式是r=(sum - dist) / sum,sum是两字符串长度和,dist为类编辑距离,删除/新增距离依然+1,替换距离+2,r=(5-3)/5=0.4 Levenshtein.ratio("abc","af) #中文比较,要转为unicode编码,才能获得正确结果 Levenshtein.distance(u"中国",u"北京") Levenshtein.distance(unicode("中国", "utf-8"), unicode("北京", "utf-8")) Levenshtein.ratio(unicode("中国", "utf-8"), unicode("北京", "utf-8"))
6.包含元组的list
元素是元组格式的list进行排序和格式化输出
queryList = [("iphone", 1), ("miphone", 10)] queryList.sort(key=lambda item:item[1], reverse=True) str = ",".join([k + ":" + str(v) for (k, v) in queryList])
7. 读配置文件
为了更好的维护程序,提高程序的灵活性,往往使用配置文件来设置程序中的变量。
config文件
[global] ip=10.3.22.26 port=123 user=user password=user
读取
import ConfigParser
config1 = ConfigParser.ConfigParser()
config1.readfp(open("config","rb"))
print config1.get("global","ip")
8. 正则表达式处理字符串
替换字符串中特定格式的子串
import re pattern=re.compile('\[\d*\]') #[1],[1234]此类格式 str='[1]123 [2]245 [3]789' #去掉[...] str1=pattern.sub('',str)
以特定格式子串为分隔符,分割字符串,返回列表
arr=re.split('\[\d*\]',str1)
9.HTTP请求
import json import time import urllib import urllib2 #用quote来转义特殊字符 url = "http://mvideo.n.duokanbox.com/api/a1/search?kw=" +urllib.quote(keyword) req = urllib2.Request(url) conn = urllib2.urlopen(req) res = conn.read() res = json.loads(res) print res
10.字符串长度
len(string)返回的是字节数,len(unicode)返回的是字符数
11.dict
#遍历dict for k,v in dict.iteritems(): print '%s:%s' % (k, v)
12.编码错误
提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
解决:
import sys reload(sys) sys.setdefaultencoding('utf-8')