Dormouse Hole

The new hole since 2018

0%

简介

在 Python 开发中,尤其是在涉及 web 开发时,不可避免会与 JSON (JavaScript Object Notation) 打交道。本文主要尝试介绍如何在 Python 中使用 JSON 。

在 Python 3 的官方文档中关于 JSON 操作的函数主要有 4 个,它们分别是 json.dump()json.load()json.dumps()json.loads()json.dump()json.dumps() 的功能是将 Python 对象进行编码( encoder ) ,转化为 JSON 格式;而 json.load()json.loads() 则反之,对 JSON 格式对象解码( decoder ),转化为 Python 对象。

Read more »

原来一直使用 Sphinx 写东西, 2018 年想开始使用一个真正的博客系统来写一些博客,于是选用了 Hexo 。我主要使用 Python 进行开发,那么为什么不选用 Pelican 之类的以 Python 为基础的博客系统呢?因为不够好看,不够方便。下面是我在安装及使用 Hexo 过程中的一些笔记。

Read more »

打开文件

打开文件示例:

1
2
3
4
5
6
7
with open("/tmp/foo.txt") as file:
data = file.read()

with open('examples/favorite-people.txt', encoding='utf-8') as a_file:
for a_line in a_file:
line_number += 1
print('{:>4} {}'.format(line_number, a_line.rstrip()))

使用字符串的 format() 方法可以打印出行号和行自身。格式说明符 {:>4} 的意思是:使用最多四个空格使之右对齐,然后打印此参数。

变量 a_line 是包括回车符等在内的完整的一行。字符串方法rstrip()可以去掉尾随的空白符,包括回车符。

Read more »

列表推导(过滤)

以过滤偶数为例,一般方法:

1
2
3
4
5
numbers = [1,2,3,4,5,6]
even = []
for number in numbers:
if number%2 == 0:
even.append(number)

推导方式过滤:

1
2
numbers = [1,2,3,4,5,6]
even = [number for number in numbers if number%2 == 0]
Read more »

Python 标准库中的 datetime 模块提供了各种对日期和时间的处理方法。

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
In [1]: import datetime

In [2]: now = datetime.datetime.now()

In [3]: now
Out[3]: datetime.datetime(2015, 6, 1, 10, 26, 38, 836099)

时间转换为字符串
In [4]: now.strftime("%Y-%m-%d %H:%M:%S")
Out[4]: '2015-06-01 10:26:38'

In [5]: now.replace(hour=0,minute=0,second=0)
Out[5]: datetime.datetime(2015, 6, 1, 0, 0, 0, 836099)

In [6]: now - datetime.timedelta(days=1)
Out[6]: datetime.datetime(2015, 5, 31, 10, 26, 38, 836099)

字符串转换为时间
In [7]: str = 'Fri, 19 May 2017 10:50:42'
In [8]: datetime.datetime.strptime(str, '%a, %d %b %Y %H:%M:%S')
Out[8]: datetime.datetime(2017, 5, 19, 10, 50, 42)

struct time to timestamp
time.mktime()

time zone
time.timezone

time to loacl datetime
datetime.fromtimestamp(time.mktime(struct_time)-time.timezone)
Read more »

合并两个字典

Python 3.5 或者以后:

1
z = {**x, **y}

Python 2 、或 3.4 以前:

1
2
z = x.copy()
z.update(y)

推导

和列表推导类似,字典同样可以推导:

1
2
3
teams = ["Packers", "49ers", "Ravens", "Patriots"]
print {key: value for value, key in enumerate(teams)}
>>> {'49ers': 1, 'Ravens': 2, 'Patriots': 3, 'Packers': 0}
Read more »

lambda

lambda 语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。 lambda 语句构建是一个函数对象:

1
2
3
4
5
6
7
In [1]: f = lambda x: x * 2

In [2]: f(8)
Out[2]: 16

In [3]: f
Out[3]: <function __main__.<lambda>(x)>
Read more »

本文基于 Python 2.7.6 [GCC 4.8.2] on linux2 。

Python 中排序常用的有 sort 和 sorted 。 首先来看看定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> help(list.sort)
Help on method_descriptor:

sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1

>>> help(sorted)
Help on built-in function sorted in module __builtin__:

sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
Read more »

常用代码:

1
2
3
4
5
6
7
8
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
self.logger.addHandler(ch)
Read more »