# 多行结果输出支持
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

# 过滤器
fibonacci = [0,1,1,2,3,5,8,13,21,34,55]
list(filter(lambda x: x % 2, fibonacci))

import functools
functools.reduce(lambda x,y: x+y, [47,11,42,67])

"""
Explanation: 文件 IO
End of explanation
"""


import json

data = {
    'name' : 'ACME',
    'shares' : 100,
    'price' : 542.23
}

json_str = json.dumps(data)

json_str

data = json.loads(json_str)

data

"""
Explanation: 读写压缩文件

gzip 和 bz2 模块可以很容易的处理这些文件。 两个模块都为 open() 函数提供了另外的实现来解决这个问题

```Python
读
gzip compression
import gzip
with gzip.open('somefile.gz', 'rt') as f:
    text = f.read()
bz2 compression
import bz2
with bz2.open('somefile.bz2', 'rt') as f:
    text = f.read()
```
```Python
写
gzip compression
import gzip
with gzip.open('somefile.gz', 'wt') as f:
    f.write(text)
bz2 compression
import bz2
with bz2.open('somefile.bz2', 'wt') as f:
    f.write(text)
```
CSV 文件

对于大多数的CSV格式的数据读写问题，都可以使用 csv 库

python
import csv
with open('stocks.csv') as f:
    f_csv = csv.reader(f)
    headers = next(f_csv)
    for row in f_csv:
        # Process row
        ...
python
from collections import namedtuple
with open('stock.csv') as f:
    f_csv = csv.reader(f)
    headings = next(f_csv)
    Row = namedtuple('Row', headings)
    for r in f_csv:
        row = Row(*r)
        # Process row
        ...
JSON 数据

json 模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() ， 要比其他序列化函数库如pickle的接口少得多（字符串操作）
如果你要处理的是文件而不是字符串，你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据
End of explanation
"""


d = {'a': True,
     'b': 'Hello',
     'c': None}
json.dumps(d)

"""
Explanation: ```python
Writing JSON data
with open('data.json', 'w') as f:
    json.dump(data, f)
Reading data back
with open('data.json', 'r') as f:
    data = json.load(f)
```
End of explanation
"""


