经过进一个月的折腾,博客终于稳定了下来。
由于这学期学习比较紧张,所以基本没有什么时间继续做论坛。
博客也准备重做了,前几天关掉了论坛,以后就以更新博客为主。
博客由 wordpress 升级到了 typecho。
typecho 没有了 wordpress 那样臃肿,小清新的风格,超简洁,我很喜欢。
博客换了新服务器,也加了 cdn,这样访问速度也能快一点。
准备把博客一直写下去。
慢慢坚持。
分享一些自己的生活经历,以及一些计算机方面的资料。
欢迎大家关注。

对 dict 排序的方法,主要是把 dict 中的元素分离出来放到一个 list 中,对 list 排序,从而间接实现对 dict 的排序。
这个"元素"可以是 key、value 或者 item。

# -*- coding: utf-8 -*-

adict = {
    "a" : 2,
    "c" : 1,
    "b" : 3
}

def sortedDictValues1(self):
    items = self.items()
    items.sort()
    return [value for key, value in items]

newAdict1 = sortedDictValues1(adict)
print newAdict1

def sortedDictValues2(self):
    keys = self.keys()
    keys.sort()
    return [self[key] for key in keys]

newAdict2 = sortedDictValues2(adict)
print newAdict2

newAdict3 = [(k,adict[k]) for k in sorted(adict.keys())] 
print newAdict3

def sort_by_value(self):
    items = self.items()
    backitems = [[v[1],v[0]] for v in items]
    backitems.sort()
    return [backitems[i][1] for i in range(0,len(backitems))]

newAdict4 = sort_by_value(adict)
print newAdict4

newAdict5 = [ v for v in sorted(adict.values())] 
print newAdict5

newAdict6 = sorted(adict.items(), lambda x, y: cmp(x[1], y[1]))
print newAdict6

newAdict7 = sorted(adict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
print newAdict7

newAdict8 = sorted(adict.items(), key=lambda d: d[0])
print newAdict8

newAdict9 = sorted(adict.items(), key=lambda d: d[1])
print newAdict9

# -*- coding: utf-8 -*-

import datetime
import time

# get date
today = datetime.date.today()
print today

oneday = datetime.timedelta(days=1)
yesterday = today - oneday
print yesterday

tomorrow = today + oneday
print tomorrow

主要是通过中文编码范围匹配

# -*- coding: utf-8 -*-
import re
import sys

reload(sys)
sys.setdefaultencoding("utf8")

def translate(str):
    # 处理前进行相关的处理 包括转换成 Unicode 等
    line = str.strip().decode('utf-8', 'ignore')
    # 中文的编码范围是 \u4e00 到 \u9fa5
    p2 = re.compile(ur'[^\u4e00-\u9fa5]')
    zh = " ".join(p2.split(line)).strip()
    zh = ",".join(zh.split())
    # 经过相关处理后得到中文的文本
    outStr = zh
    return outStr

目录结构

demo.py
MyPackage
---classOne.py
---classTwo.py
---__init__.py

1.__init__.py 空白文件方式
demo.py 内容

from MyPackage.classOne import classOne
from MyPackage.classTwo import classTwo
if __name__ == "__main__":
    c1 = classOne()
    c1.printInfo()
    c2 = classTwo()
    c2.printInfo()

classOne.py 内容

class classOne:
    def __init__(self):
        self.name = "class one"
    def printInfo(self):
        print "i am class One!"

classTwo.py 内容

class classTwo:
    def __init__(self):
        self.name = "class two"
    def printInfo(self):
        print "i am class two!"

- 阅读剩余部分 -

a = u'China'
b = 'China'
c = u'中国'
d = '中国'
# 1
print '%s %s' % (a, b)
# 2
print '%s' % c
# 3
print '%s' % d
# 4
print '%s %s' % (c, d)

先说正确答案,只有最后一行会报错。

Python2,默认的字符类型是 str,这个 str 和 Python3 的 str 完全不同,Python2 的 str 类型是 8 位的 ascii 序列。
Python2 在处理 str 类型转换时遵循这样的规则:如果被处理的 str 型变量值小于 7 位,就可以和 unicode 类型混用。可以做 + 连接,格式化等操作,同 unicode 享受同样的待遇。Python2 在格式化字符时,会把 str 格式化为 str,如果字符串里混入了 unicode,就会把其他字符都转化为 unicode。
所以这道题里 1 处的 a,b 两个值混合后的字符就是一个 unicode 字符串,c 和 d 单独格式化后仍保留了自己的格式。但是 Python2 在格式化代码位置 4 时,发现 c 是 unicode 而 d 不是,就会尝试按照上面的混用规则,格式化 d 为 unicode 类型,但是 d 的值'中国'显然是一个大于 7 位的 str,因此 Python2 抛出 UnicodeDecodeError。
Python3 里,str 类型则变成了一个纯 unicode 字符,也就是说 Python3 里的 str 等价于 Python2 里的 unicode 类型。Python3 里为了清晰明了,使用 bytes 代表 8 位 ascii 序列。除此之外,Python3 严格禁止混用两种类型。
使用 Python2 处理字符串,尤其是中文字符串,最好前边加上 u。Python2 里不要混用 str 和 unicode,如果处理文本时,先将全部数据格式化成 unicode。

基础方法

ids = [1,2,3,3,4,2,3,4,5,6,1]
news_ids = []
for id in ids:
    if id not in news_ids:
        news_ids.append(id)
print news_ids

set 容器

ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)

itertools.grouby

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)
for k, g in it:
    print k

reduce

ids = [1,4,3,3,4,2,3,4,5,6,1]
func = lambda x,y:x if y in x else x + [y]
reduce(func, [[], ] + ids)
[1, 4, 3, 2, 5, 6]

变量交换

a, b = b, a

循环遍历

for i in xrange(6):
    print i

带有索引位置的集合遍历

colors = ['red', 'green', 'blue', 'yellow']
for i, color in enumerate(colors):
    print i, color

字符串拼接

names = ['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie']
print ', '.join(names)

打开文件

with open('data.txt') as f:
    data = f.read()

列表推导式

[j for i in xrange(10)]

遍历字典

for k, v in d.iteritems():
    print k, v
for i, v in enumerate(l):
    pass

构建字典

names = ['raymond', 'rachel', 'matthew']
colors = ['red', 'green', 'blue']
d = dict(izip(names, colors))

- 阅读剩余部分 -

Flask 与前端数据交互的时候,经常会使用 ImmutableMultiDict、MultiDict 类型。

combined = CombinedMultiDict([self])
getData = combined['endDate']

self 是一组 ImmutableMultiDict 类型,endDate 是一个 key。
下面是样例:

>>> from werkzeug.datastructures import CombinedMultiDict, MultiDict
>>> post = MultiDict([('foo', 'bar')])
>>> get = MultiDict([('blub', 'blah')])
>>> combined = CombinedMultiDict([get, post])
>>> combined['foo']
'bar'
>>> combined['blub']
'blah'