有意思的记录-python

时间:2021-11-02 10:53:36

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"))

有意思的记录-python

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])

有意思的记录-python

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')