【问题标题】:TypeError: argument 1 must be string or buffer, not instanceTypeError:参数 1 必须是字符串或缓冲区,而不是实例
【发布时间】:2017-07-02 13:11:12
【问题描述】:

我在 python 中的应用程序出现问题,我的应用程序用于在指定时间从网络下载视频。我的程序名称是 tidopy.py 但我得到这个错误:

回溯(最近一次通话最后一次): 文件“tidopy.py”,第 29 行,在 file.write(数据) TypeError: 参数 1 必须是字符串或缓冲区,而不是实例

这部分我有问题:

while (coun > x):
    file = open(namelist[x], 'wb')
    file.write(urllib2.urlopen(addresslist[x])).read()
    file.close()
    x = x + 1

x 是视频数量的变量。

namelist 是视频名称列表。

addresslist是网络视频的地址列表

我该如何解决? 请帮忙。

【问题讨论】:

  • 我认为你只需要解决这个问题:file.write(urllib2.urlopen(addresslist[x]).read())。在 urlopen 上激活读取而不是写入。
  • 你明白这条线在做什么吗:file.write(urllib2.urlopen(addresslist[x])).read()
  • 这就是为什么你不应该在一行中做四种不同的事情。
  • 回答一个非常相似的问题:stackoverflow.com/a/40894945/95852

标签: python urllib2


【解决方案1】:

这是一个从列表执行下载的简单代码。

import requests
import shutil

namelist = [...]
addresslist = [...]

for k, x in enumerate(namelist):
    r = requests.get(x, stream=True)
    if r.ok:
        with open(addresslist[k], 'wb') as f:
            r.raw.decode_content = True
            shutil.copyfileobj(r.raw, f)

【讨论】:

  • 这并没有试图解决问题,并且与OP的代码完全不同。
猜你喜欢
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多