我有一个需要base64编码文件的函数。
我可以使用以下方式下载并保存该文件:
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"})
f = urllib2.urlopen(req)
with open('file.torrent', "wb") as code:
code.write(f.read())
但我不想保存它,我想将其传递给函数。
最佳答案
如果需要传递类似object的文件,则可以将base64编码的字符串写入io.BytesIO
对象:
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())
输出:
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
命名: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就可以使用文件。with open(f.name) as f:
print(f.read())
关于python - 如何下载文件并将其传递给函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34372102/