在python中将字节转换为文件对象

Posted

技术标签:

【中文标题】在python中将字节转换为文件对象【英文标题】:Convert bytes to a file object in python 【发布时间】:2020-09-16 14:53:28 【问题描述】:

我有一个小型应用程序,它使用以下方式读取本地文件:open(diefile_path, 'r') as csv_fileopen(diefile_path, 'r') as fileand also uses linecache module

我需要将用途扩展到从远程服务器发送的文件。 服务器类型接收的内容是字节。

我找不到很多关于处理 IOBytes 类型的信息,我想知道是否有一种方法可以将字节块转换为类似文件的对象。 我的目标是使用上面指定的 API (open,linecache) 我能够使用 data.decode("utf-8") 将字节转换为字符串, 但是我不能使用上面的方法(openlinecache

一个小例子来说明

data = 'b'First line\nSecond line\nThird line\n'

with open(data) as file:
    line = file.readline()
    print(line)

输出:

First line
Second line
Third line

可以吗?

【问题讨论】:

【参考方案1】:

open 用于打开实际文件,返回一个类似文件的对象。在这里,您已经在内存中拥有数据,而不是在文件中,因此您可以直接实例化类文件对象。

import io


data = b'First line\nSecond line\nThird line\n'
file = io.StringIO(data.decode())
for line in file:
    print(line.strip())

但是,如果你得到的只是一个换行符分隔的字符串,你可以直接将它拆分成一个列表。

lines = data.decode().strip().split('\n')

主要区别在于StringIO版本稍微懒一点;与列表相比,它的内存占用更小,因为它按照迭代器的要求拆分字符串。

【讨论】:

谢谢,所以据我了解,我将不得不将 API 更改为“开放”以外的其他内容

以上是关于在python中将字节转换为文件对象的主要内容,如果未能解决你的问题,请参考以下文章

在python中将字节转换为BufferedReader [重复]

在 Python 3 中将 int 转换为字节

如何在 Python 中将字节数转换为二进制数?

在python中将字符串转换为数字[关闭]

在python中将字节转换为位

如何在python中将纯文本转换为分段块(字节)? [复制]