首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何下载文件并将其传递给函数

如何下载文件并将其传递给函数
EN

Stack Overflow用户
提问于 2015-12-19 15:01:24
回答 1查看 280关注 0票数 1

我有一个函数需要一个base64编码的文件。我可以下载和保存这个文件使用;

代码语言:javascript
复制
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
f = urllib2.urlopen(req)
with open('file.torrent', "wb") as code:
        code.write(f.read())

但是我不想保存它,我想把它传递给一个函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-19 15:16:12

如果需要传递类似对象的文件,可以将base64编码的字符串写入io.BytesIO对象:

代码语言:javascript
复制
import requests
from io import BytesIO
f = BytesIO()
r = requests.get("http://stackoverflow.com/questions/34372102/how-to-download-a-file-and-pass-it-to-a-function")

f.write(r.content.encode("base_64"))

f.seek(0)

print(f.read())

输出:

代码语言:javascript
复制
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEu
b3JnL1FBUGFnZSI+DQo8aGVhZD4NCg0KPHRpdGxlPnB5dGhvbiAtIEhvdyB0byBkb3dubG9hZCBh
IGZpbGUgYW5kIHBhc3MgaXQgdG8gYSBmdW5jdGlvbiAtIFN0YWNrIE92ZXJmbG93PC90aXRsZT4N
CiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Ii8vY2RuLnNzdGF0aWMubmV0L3N0
YWNrb3ZlcmZsb3cvaW1nL2Zhdmljb24uaWNvP3Y9NGYzMmVjYzhmNDNkIj4NCiAgICA8bGluayBy
ZWw9ImFwcGxlLXRvdWNoLWljb24gaW1hZ2Vfc3JjIiBocmVmPSIvL2Nkbi5zc3RhdGljLm5ldC9z
dGFja292ZXJmbG93L2ltZy9hcHBsZS10b3VjaC1pY29uLnBuZz92PWM3OGJkNDU3NTc1YSI+DQog
ICAgPGxpbmsgcmVsPSJzZWFyY2giIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlw
dGlvbit4bWwiIHRpdGxlPSJTdGFjayBPdmVyZmxvdyIgaHJlZj0iL29wZW5zZWFyY2gueG1sIj4N
 ..................................................

f直接传递到您的函数。如果您只需要传递编码的字符串,只需使用r.content.encode("base_64")f.read().encode("base_64")传递urllib2即可。

如果它需要有一个.torrent扩展,您可以写到一个NamedTemporaryFile,然后用f.name拉出这个名称

代码语言:javascript
复制
from tempfile import NamedTemporaryFile
f = NamedTemporaryFile("wb+",suffix=".torrent")
r = requests.get("http://stackoverflow.com/questions/34372102/how-to-download-a-file-and-pass-it-to-a-function")

print(f.name)
f.write(r.content.encode("base_64"))
f.seek(0)

/tmp/tmpzedDPm.torrent

您可以将文件对象或f.name传递给您的函数,因为该函数将能够与f.name一起使用该文件。

代码语言:javascript
复制
with open(f.name) as f:
    print(f.read())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34372102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档