在Python中将str数据转换为文件对象

2024-03-04

我正在将视频发布到 Google Cloud Buckets,签名的 PUT url 就可以解决问题。但是,如果文件大小大于 10MB,它将无法工作,因此我找到了一个开源项目,可以让我执行此操作,但它使用类似文件的对象。

def read_in_chunks(file_object, chunk_size=65536):
while True:
    data = file_object.read(chunk_size)
    if not data:
        break
    yield data

def main(file, url):
content_name = str(file)
content_path = os.path.abspath(file)
content_size = os.stat(content_path).st_size

print content_name, content_path, content_size

f = open(content_path)

index = 0
offset = 0
headers = {}

for chunk in read_in_chunks(f):
    offset = index + len(chunk)
    headers['Content-Type'] = 'application/octet-stream'
    headers['Content-length'] = content_size
    headers['Content-Range'] = 'bytes %s-%s/%s' % (index, offset, content_size)
    index = offset
    try:
        r = requests.put(url, data=chunk, headers=headers)
        print "r: %s, Content-Range: %s" % (r, headers['Content-Range'])
    except Exception, e:
        print e

我上传视频的方式是传递 json 格式的数据。

class GetData(webapp2.RequestHandler):
def post(self):
    data = self.request.get('file')

然后我所做的就是一个 request.put(url, data=data)。这工作顺利。

如何将 Python 识别为 str 的数据转换为类似文件的对象?


在大多数情况下,所谓的“类文件”对象只是一个实现了 Python 缓冲区接口的对象;也就是说,有类似的方法read, write, seek, 等等。

缓冲区接口工具的标准库模块称为io https://docs.python.org/3/library/io.html。您正在寻找其中之一io.StringIO https://docs.python.org/3/library/io.html#io.StringIO or io.BytesIO https://docs.python.org/3/library/io.html#io.BytesIO,取决于您拥有的数据类型 - 如果它是 unicode 编码的字符串,您应该使用io.StringIO,但您可能正在使用原始字节流(例如在图像文件中),而不是仅使用文本,所以io.BytesIO这就是您正在寻找的。处理文件时,这与执行相同的区别open(path, 'r')对于 unicode 文件和open(path, 'rb')用于字节的原始处理。

这两个类都将类文件对象的数据作为第一个参数,因此您只需执行以下操作:

f = io.BytesIO(b'test data')

在这之后,f将是一个像文件一样工作的对象,不同之处在于它将数据保存在内存中而不是磁盘上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中将str数据转换为文件对象 的相关文章

随机推荐

  • 在 Mac 上启动 AVD(Android 虚拟设备)时 qemu-system-i386 意外退出(非法指令 4)

    我在 Mac Macbook Pro 2017 年 8 月 OSX 10 12 4 上安装了 Android Studio 然后启动 创建了一个 hello world 项目并创建了一个 AVD Android 虚拟设备 Nexus 5 来
  • CloudFront 签名 url 的最长过期时间是多少

    我正在使用 CloudFront 从中生成签名 URLdoc https docs aws amazon com AmazonCloudFront latest DeveloperGuide CFPrivateDistJavaDevelop
  • JAXB 如何推进 XMLStreamReader?

    我正在使用 JAXB 通过 XMLStreamReader 从非常大的 XML 文件中解组对象 如果我要解组的 XML 元素是分隔的 通过换行符甚至单个空格 则效果很好 如果我要解组的 XML 元素之间没有空格 那么我会丢失所有其他项目 X
  • Rust 编译器什么时候不能证明借用是不相交的?

    In 诺米康第 3 2 节 https doc rust lang org nomicon references html liveness 在 活跃度 标题下 它说 然而 经常出现的情况是 Rust 不够聪明 无法 证明多次借用是不相交的
  • std 映射复合键

    我有一个问题运算符std map 所需的方法 我使用结构作为复合键 如下所示 struct MyKey std string string1 std string string2 std string string3 unsigned in
  • 跟踪实时推文流中的关键字

    我安装并尝试了 tweepy 我现在正在使用以下功能 from API参考 http packages python org tweepy html api html api reference API public timeline 返回
  • 检查拖放是否正在进行

    有什么方法可以检查拖放是否正在进行中 可以检查一些方法或win32 api吗 我知道我可以设置AllowDrop 并使用事件 但在这种情况下它不起作用 基本上我想用代码检查是否any拖放正在进行中 我有一个类似的问题 我自己回答了 经过几个
  • 了解 Tensorflow LSTM 模型输入?

    我在理解 TensorFlow 中的 LSTM 模型时遇到一些困难 我用tflearn http tflearn org 作为包装器 因为它自动完成所有初始化和其他更高级别的工作 为了简单起见 我们考虑这个示例程序 https github
  • MongoDB - 将 CSV 导入嵌套文档

    我有一个架构 其文档结构如下所示 id ObjectId 4f8dcb06ee21783d7400003c venue ObjectId 4f8dcb06ee21783d7400003b name Some event webite www
  • 计算两个数组之间相关性的有效算法[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找一种算法来计算两个双精度数
  • 解析包含自定义格式的日期和时间的字符串

    我有一个下一个格式的字符串 ORDER20100322194007 where 20100322是一个日期并且194007是一个时间 如何解析字符串并获取其中包含的内容DateTime object 它总是以ORDER string pat
  • iOS 12 和 SKShader 中已弃用 OpenGL ES

    我对 SpriteKit 中着色器的概念和使用非常陌生 我发现本教程介绍了如何使用附加到 Color Sprite 的自定义着色器属性的自定义着色器文件 Fractal fsh 渲染 Mandelbrot 分形 https www wehe
  • Logstash 的流行为不一致 - ELK

    我有一个包含几个平面字段和几个嵌套字段的索引 我正在尝试通过 Logstash 将 SQL Server 中的信息通过特定 ID 流式传输到嵌套字段中 当我流式传输数据时only one然后它就完全成功地通过了 没有任何问题 另一方面 当我
  • 释放 Javascript 对象使用的内存

    我应该自己释放分配的内存 还是有一种垃圾收集器 在 JavaScript 中使用以下代码可以吗 function fillArray var c new Array c push 3 c push 2 return c var arr fi
  • 将 Google Analytics 代码放置在 WordPress 特定页面中

    在客户填写联系表单后 我试图让 Google Analytics 代码在感谢页面上工作 并且我尝试使用 HTML 将其放入 Wordpress 后端管理下的页面中的感谢页面中tab 但它似乎在代码之间生成不必要的 p 和 br 标签 特别是
  • 忽略标志指针 0x10ef76ec0 的 RegisterValidateFunction():在 Xcode 中的该地址处找不到标志

    我该如何解决这个问题 W0721 13 54 19 105928 1 commandlineflags cc 1503 忽略标志指针 0x10ef76ec0 的 RegisterValidateFunction 在该地址找不到标志 出现此问
  • Mac OS Gatekeeper 阻止签名命令行工具

    我在 Xcode 中有一个 命令行工具 目标 不是应用程序包 它被 Gatekeeper 阻止 我多年来一直使用这个工具作为我的 PostCheck 地址簿插件的简单安装程序 2012 年 我用我的 Apple 开发者 ID 签署了该工具
  • 如何在android中测量环境温度

    我想在 Android 设备上测量环境温度 但我的设备不包括温度计传感器 我怎样才能测量它 谢谢 这是如何获取的基本示例Android 中的环境温度 import android support v7 app AppCompatActivi
  • Jaspic ServerAuthModule 委托给 JAAS Krb5LoginModule

    我必须编写一个自定义 Jaspic ServerAuthModule 它需要将专有的身份验证 Cookie 添加到 HTTP 响应和 HTTP 请求 以传播到应用程序服务器上运行的应用程序 身份验证必须使用 Kerberos SPNEGO
  • 在Python中将str数据转换为文件对象

    我正在将视频发布到 Google Cloud Buckets 签名的 PUT url 就可以解决问题 但是 如果文件大小大于 10MB 它将无法工作 因此我找到了一个开源项目 可以让我执行此操作 但它使用类似文件的对象 def read i