深度解密 python challenge第5关之【用 pickle 序列化 】

结题思路:

  我们看 pronounce it    peak  peak peak  原来啊 python 模块里有一个模块 叫  pickle 模块。支持序列号和反序列化。那什么是 序列化与反序列化呢?就是 将数据持久化到内存或者硬盘里 就叫序列化,从这里面再读出来 就叫反序列化。类似于java里的 serailized 和 parable 可序列化的。【主要用于存储到内存中】或者在Activiy中传递,我说的远了点。来来来继续我们继续解题!! 暗示我们用 pickle模块。我们查看源代码(网页源代码)。发现有一个东西。来来来继续。下面是源代码:

页面源代码为:

 
<html>
<head>
  <title>peak hell</title>
  <link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<center>
<img src="peakhell.jpg"/>
<br><font color="#c0c0ff">
pronounce it
<br>
<peakhell src="banner.p"/>
</body>
</html>

<!-- peak hell sounds familiar ? -->

关键突破点:

 banner.p。暗示我们要反序列化或者序列化这个鸟东西。于是很快我们写出了如下代码:
 
 
# -*- coding:utf-8 -*-
# **********************************
# ** http://weibo.com/lixiaodaoaaa #
# ** create at 2017/6/15   14:29 ***
# ****** by:lixiaodaoaaa ***********


import pickle
import urllib
import pprint


def changeLetterToString(line):
    letter_string = ""
    for (char, times) in line:
        letter_string += char * times
    return letter_string


sourceUrl = "http://www.pythonchallenge.com/pc/def/peak.html"
dataUrl = "http://www.pythonchallenge.com/pc/def/banner.p"

myData = urllib.urlopen(dataUrl)

myObject = pickle.load(myData)
# pprint.pprint(myObject, None, 14)

for line in pickle.load(urllib.urlopen(dataUrl)):
    result = ""
    for char, times in line:
        result +="".join(char * times)
    print  result

 运行的结果如下:

              #####                                                                      ##### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
      ###      ####   ###         ###       #####   ###    #####   ###          ###       #### 
   ###   ##    #### #######     ##  ###      #### #######   #### #######     ###  ###     #### 
  ###     ###  #####    ####   ###   ####    #####    ####  #####    ####   ###     ###   #### 
 ###           ####     ####   ###    ###    ####     ####  ####     ####  ###      ####  #### 
 ###           ####     ####          ###    ####     ####  ####     ####  ###       ###  #### 
####           ####     ####     ##   ###    ####     ####  ####     #### ####       ###  #### 
####           ####     ####   ##########    ####     ####  ####     #### ##############  #### 
####           ####     ####  ###    ####    ####     ####  ####     #### ####            #### 
####           ####     #### ####     ###    ####     ####  ####     #### ####            #### 
 ###           ####     #### ####     ###    ####     ####  ####     ####  ###            #### 
  ###      ##  ####     ####  ###    ####    ####     ####  ####     ####   ###      ##   #### 
   ###    ##   ####     ####   ###########   ####     ####  ####     ####    ###    ##    #### 
      ###     ######    #####    ##    #### ######    ###########    #####      ###      ######

结论:

   啊哈哈,是一个channel 。我们就知道我们下一关的跳转地址是: http://www.pythonchallenge.com/pc/def/ channel.html. OVER

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值