鱼C论坛

 找回密码
 立即注册
查看: 840|回复: 9

关于pickle的问题

[复制链接]
发表于 2018-10-30 00:42:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想用pickle解码一个网上的文件,所以写了如下代码
  1. import pickle
  2. import requests
  3. raw = open(requests.get('http://www.pythonchallenge.com/pc/def/banner.p').text, 'rb')
  4. data = pickle.load(raw)
  5. print(data)
复制代码


但是在“raw = open(requests.get('http://www.pythonchallenge.com/pc/def/banner.p').text, 'rb')”这一列的时候报错,提示“File name too long”,百思不得其解,为啥open会变成file name?这是为啥呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-30 05:28:50 | 显示全部楼层
因为 open 打开的是 requests.get('http://www.pythonchallenge.com/pc/def/banner.p').text 的内容,而该内容这么长:

(lp0
(lp1
(S' '
p2
I95
tp3
aa(lp4
(g2
I14
tp5
a(S'#'
p6
I5
tp7
a(g2
I70
tp8
a(g6
I5
tp9
a(g2
I1
tp10
aa(lp11
(g2
I15
tp12
a(g6
I4
tp13
a(g2
I71
tp14
a(g6
I4
tp15
a(g2
I1
tp16
aa(lp17
(g2
I15
tp18
a(g6
I4
tp19
a(g2
I71
tp20
a(g6
I4
tp21
a(g2
I1
tp22
aa(lp23
(g2
I15
tp24
a(g6
I4
tp25
a(g2
I71
tp26
a(g6
I4
tp27
a(g2
I1
tp28
aa(lp29
(g2
I15
tp30
a(g6
I4
tp31
a(g2
I71
tp32
a(g6
I4
tp33
a(g2
I1
tp34
aa(lp35
(g2
I15
tp36
a(g6
I4
tp37
a(g2
I71
tp38
a(g6
I4
tp39
a(g2
I1
tp40
aa(lp41
(g2
I15
tp42
a(g6
I4
tp43
a(g2
I71
tp44
a(g6
I4
tp45
a(g2
I1
tp46
aa(lp47
(g2
I15
tp48
a(g6
I4
tp49
a(g2
I71
tp50
a(g6
I4
tp51
a(g2
I1
tp52
aa(lp53
(g2
I6
tp54
a(g6
I3
tp55
a(g2
I6
tp56
a(g6
I4
tp57
a(g2
I3
tp58
a(g6
I3
tp59
a(g2
I9
tp60
a(g6
I3
tp61
a(g2
I7
tp62
a(g6
I5
tp63
a(g2
I3
tp64
a(g6
I3
tp65
a(g2
I4
tp66
a(g6
I5
tp67
a(g2
I3
tp68
a(g6
I3
tp69
a(g2
I10
tp70
a(g6
I3
tp71
a(g2
I7
tp72
a(g6
I4
tp73
a(g2
I1
tp74
aa(lp75
(g2
I3
tp76
a(g6
I3
tp77
a(g2
I3
tp78
a(g6
I2
tp79
a(g2
I4
tp80
a(g6
I4
tp81
a(g2
I1
tp82
a(g6
I7
tp83
a(g2
I5
tp84
a(g6
I2
tp85
a(g2
I2
tp86
a(g6
I3
tp87
a(g2
I6
tp88
a(g6
I4
tp89
a(g2
I1
tp90
a(g6
I7
tp91
a(g2
I3
tp92
a(g6
I4
tp93
a(g2
I1
tp94
a(g6
I7
tp95
a(g2
I5
tp96
a(g6
I3
tp97
a(g2
I2
tp98
a(g6
I3
tp99
a(g2
I5
tp100
a(g6
I4
tp101
a(g2
I1
tp102
aa(lp103
(g2
I2
tp104
a(g6
I3
tp105
a(g2
I5
tp106
a(g6
I3
tp107
a(g2
I2
tp108
a(g6
I5
tp109
a(g2
I4
tp110
a(g6
I4
tp111
a(g2
I3
tp112
a(g6
I3
tp113
a(g2
I3
tp114
a(g6
I4
tp115
a(g2
I4
tp116
a(g6
I5
tp117
a(g2
I4
tp118
a(g6
I4
tp119
a(g2
I2
tp120
a(g6
I5
tp121
a(g2
I4
tp122
a(g6
I4
tp123
a(g2
I3
tp124
a(g6
I3
tp125
a(g2
I5
tp126
a(g6
I3
tp127
a(g2
I3
tp128
a(g6
I4
tp129
a(g2
I1
tp130
aa(lp131
(g2
I1
tp132
a(g6
I3
tp133
a(g2
I11
tp134
a(g6
I4
tp135
a(g2
I5
tp136
a(g6
I4
tp137
a(g2
I3
tp138
a(g6
I3
tp139
a(g2
I4
tp140
a(g6
I3
tp141
a(g2
I4
tp142
a(g6
I4
tp143
a(g2
I5
tp144
a(g6
I4
tp145
a(g2
I2
tp146
a(g6
I4
tp147
a(g2
I5
tp148
a(g6
I4
tp149
a(g2
I2
tp150
a(g6
I3
tp151
a(g2
I6
tp152
a(g6
I4
tp153
a(g2
I2
tp154
a(g6
I4
tp155
a(g2
I1
tp156
aa(lp157
(g2
I1
tp158
a(g6
I3
tp159
a(g2
I11
tp160
a(g6
I4
tp161
a(g2
I5
tp162
a(g6
I4
tp163
a(g2
I10
tp164
a(g6
I3
tp165
a(g2
I4
tp166
a(g6
I4
tp167
a(g2
I5
tp168
a(g6
I4
tp169
a(g2
I2
tp170
a(g6
I4
tp171
a(g2
I5
tp172
a(g6
I4
tp173
a(g2
I2
tp174
a(g6
I3
tp175
a(g2
I7
tp176
a(g6
I3
tp177
a(g2
I2
tp178
a(g6
I4
tp179
a(g2
I1
tp180
aa(lp181
(g6
I4
tp182
a(g2
I11
tp183
a(g6
I4
tp184
a(g2
I5
tp185
a(g6
I4
tp186
a(g2
I5
tp187
a(g6
I2
tp188
a(g2
I3
tp189
a(g6
I3
tp190
a(g2
I4
tp191
a(g6
I4
tp192
a(g2
I5
tp193
a(g6
I4
tp194
a(g2
I2
tp195
a(g6
I4
tp196
a(g2
I5
tp197
a(g6
I4
tp198
a(g2
I1
tp199
a(g6
I4
tp200
a(g2
I7
tp201
a(g6
I3
tp202
a(g2
I2
tp203
a(g6
I4
tp204
a(g2
I1
tp205
aa(lp206
(g6
I4
tp207
a(g2
I11
tp208
a(g6
I4
tp209
a(g2
I5
tp210
a(g6
I4
tp211
a(g2
I3
tp212
a(g6
I10
tp213
a(g2
I4
tp214
a(g6
I4
tp215
a(g2
I5
tp216
a(g6
I4
tp217
a(g2
I2
tp218
a(g6
I4
tp219
a(g2
I5
tp220
a(g6
I4
tp221
a(g2
I1
tp222
a(g6
I14
tp223
a(g2
I2
tp224
a(g6
I4
tp225
a(g2
I1
tp226
aa(lp227
(g6
I4
tp228
a(g2
I11
tp229
a(g6
I4
tp230
a(g2
I5
tp231
a(g6
I4
tp232
a(g2
I2
tp233
a(g6
I3
tp234
a(g2
I4
tp235
a(g6
I4
tp236
a(g2
I4
tp237
a(g6
I4
tp238
a(g2
I5
tp239
a(g6
I4
tp240
a(g2
I2
tp241
a(g6
I4
tp242
a(g2
I5
tp243
a(g6
I4
tp244
a(g2
I1
tp245
a(g6
I4
tp246
a(g2
I12
tp247
a(g6
I4
tp248
a(g2
I1
tp249
aa(lp250
(g6
I4
tp251
a(g2
I11
tp252
a(g6
I4
tp253
a(g2
I5
tp254
a(g6
I4
tp255
a(g2
I1
tp256
a(g6
I4
tp257
a(g2
I5
tp258
a(g6
I3
tp259
a(g2
I4
tp260
a(g6
I4
tp261
a(g2
I5
tp262
a(g6
I4
tp263
a(g2
I2
tp264
a(g6
I4
tp265
a(g2
I5
tp266
a(g6
I4
tp267
a(g2
I1
tp268
a(g6
I4
tp269
a(g2
I12
tp270
a(g6
I4
tp271
a(g2
I1
tp272
aa(lp273
(g2
I1
tp274
a(g6
I3
tp275
a(g2
I11
tp276
a(g6
I4
tp277
a(g2
I5
tp278
a(g6
I4
tp279
a(g2
I1
tp280
a(g6
I4
tp281
a(g2
I5
tp282
a(g6
I3
tp283
a(g2
I4
tp284
a(g6
I4
tp285
a(g2
I5
tp286
a(g6
I4
tp287
a(g2
I2
tp288
a(g6
I4
tp289
a(g2
I5
tp290
a(g6
I4
tp291
a(g2
I2
tp292
a(g6
I3
tp293
a(g2
I12
tp294
a(g6
I4
tp295
a(g2
I1
tp296
aa(lp297
(g2
I2
tp298
a(g6
I3
tp299
a(g2
I6
tp300
a(g6
I2
tp301
a(g2
I2
tp302
a(g6
I4
tp303
a(g2
I5
tp304
a(g6
I4
tp305
a(g2
I2
tp306
a(g6
I3
tp307
a(g2
I4
tp308
a(g6
I4
tp309
a(g2
I4
tp310
a(g6
I4
tp311
a(g2
I5
tp312
a(g6
I4
tp313
a(g2
I2
tp314
a(g6
I4
tp315
a(g2
I5
tp316
a(g6
I4
tp317
a(g2
I3
tp318
a(g6
I3
tp319
a(g2
I6
tp320
a(g6
I2
tp321
a(g2
I3
tp322
a(g6
I4
tp323
a(g2
I1
tp324
aa(lp325
(g2
I3
tp326
a(g6
I3
tp327
a(g2
I4
tp328
a(g6
I2
tp329
a(g2
I3
tp330
a(g6
I4
tp331
a(g2
I5
tp332
a(g6
I4
tp333
a(g2
I3
tp334
a(g6
I11
tp335
a(g2
I3
tp336
a(g6
I4
tp337
a(g2
I5
tp338
a(g6
I4
tp339
a(g2
I2
tp340
a(g6
I4
tp341
a(g2
I5
tp342
a(g6
I4
tp343
a(g2
I4
tp344
a(g6
I3
tp345
a(g2
I4
tp346
a(g6
I2
tp347
a(g2
I4
tp348
a(g6
I4
tp349
a(g2
I1
tp350
aa(lp351
(g2
I6
tp352
a(g6
I3
tp353
a(g2
I5
tp354
a(g6
I6
tp355
a(g2
I4
tp356
a(g6
I5
tp357
a(g2
I4
tp358
a(g6
I2
tp359
a(g2
I4
tp360
a(g6
I4
tp361
a(g2
I1
tp362
a(g6
I6
tp363
a(g2
I4
tp364
a(g6
I11
tp365
a(g2
I4
tp366
a(g6
I5
tp367
a(g2
I6
tp368
a(g6
I3
tp369
a(g2
I6
tp370
a(g6
I6
tp371
aa(lp372
(g2
I95
tp373
aa.

不合适吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-30 05:36:29 | 显示全部楼层
这道题的正确解法应该是:

  1. >>> from urllib.request import urlopen
  2. >>> import pickle
  3. >>> data = pickle.load(urlopen("http://www.pythonchallenge.com/pc/def/banner.p"))
  4. >>> for line in data:
  5.         print("".join([k * v for k, v in line]))


  6.                                                                                                
  7.               #####                                                                      #####
  8.                ####                                                                       ####
  9.                ####                                                                       ####
  10.                ####                                                                       ####
  11.                ####                                                                       ####
  12.                ####                                                                       ####
  13.                ####                                                                       ####
  14.                ####                                                                       ####
  15.       ###      ####   ###         ###       #####   ###    #####   ###          ###       ####
  16.    ###   ##    #### #######     ##  ###      #### #######   #### #######     ###  ###     ####
  17.   ###     ###  #####    ####   ###   ####    #####    ####  #####    ####   ###     ###   ####
  18. ###            ####     ####   ###    ###    ####     ####  ####     ####  ###      ####  ####
  19. ###            ####     ####          ###    ####     ####  ####     ####  ###       ###  ####
  20. ####           ####     ####     ##   ###    ####     ####  ####     #### ####       ###  ####
  21. ####           ####     ####   ##########    ####     ####  ####     #### ##############  ####
  22. ####           ####     ####  ###    ####    ####     ####  ####     #### ####            ####
  23. ####           ####     #### ####     ###    ####     ####  ####     #### ####            ####
  24. ###            ####     #### ####     ###    ####     ####  ####     ####  ###            ####
  25.   ###      ##  ####     ####  ###    ####    ####     ####  ####     ####   ###      ##   ####
  26.    ###    ##   ####     ####   ###########   ####     ####  ####     ####    ###    ##    ####
  27.       ###     ######    #####    ##    #### ######    ###########    #####      ###      ######
  28.                                                                                                
  29. >>>
复制代码

答案是:channel


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-30 12:49:18 | 显示全部楼层
小甲鱼 发表于 2018-10-30 05:36
这道题的正确解法应该是:

哎呦,小甲鱼翻牌了。谢谢。

但是我还是没有弄明白为什么request.get()不行,我觉得requests.get('http://www.pythonchallenge.com/pc/def/banner.p').text 之后得到的是一个str变量,然后把它用open( , 'rb') 读成bytes变量,这个感觉上没有出错呀。为啥会显示“File name too long”呢?网站里面的具体内容怎么会变成file name而不是file content呢?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-30 19:26:26 | 显示全部楼层
小甲鱼 发表于 2018-10-30 05:36
这道题的正确解法应该是:

我简化了下问题,为啥用urlopen可以而request.get不行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-31 08:36:44 | 显示全部楼层
有人可以帮忙看下我上面的问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-31 09:30:35 | 显示全部楼层
你Open一个文件,但是你的文件有么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-31 13:08:41 | 显示全部楼层
塔利班 发表于 2018-10-31 09:30
你Open一个文件,但是你的文件有么

所以什么样的东西才能算是文件呢?

我刚刚打印了下小甲鱼那句urlopen("http://www.pythonchallenge.com/pc/def/banner.p"的返回类型

  1. from urllib.request import urlopen
  2. print(type(urlopen("http://www.pythonchallenge.com/pc/def/banner.p")))
复制代码


得到了

  1. <class 'http.client.HTTPResponse'>
复制代码


这个class的东西是文件吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-31 13:14:57 | 显示全部楼层
本帖最后由 可爱的小本子 于 2018-10-31 14:19 编辑
塔利班 发表于 2018-10-31 09:30
你Open一个文件,但是你的文件有么


刚刚受到你的启发,我查了下pickle的官方帮助,原来pickle.loads可以读取bytes对象,所以我换成了下面的语句就顺利读取成功了。

  1. import requests
  2. import pickle
  3. data = pickle.loads(requests.get("http://www.pythonchallenge.com/pc/def/banner.p").content)
  4. print(data)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-31 14:00:49 | 显示全部楼层
可爱的小本子 发表于 2018-10-31 13:08
所以什么样的东西才能算是文件呢?

我刚刚打印了下小甲鱼那句urlopen("http://www.pythonchallenge.co ...


open读的时候,对象应该是实际存在的,一般是在你的硬盘上的一个文件,你那个是响应对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 16:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表