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

问题描述

我有一个小型应用程序,它使用以下命令读取本地文件
open(diefile_path,'r') as csv_file
open(diefile_path,'r') as file
and also uses linecache module

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

我找不到很多有关处理IOBytes类型的信息,我想知道是否有一种方法可以将字节块转换为类似文件的对象。
我的目标是使用上面指定的API(openlinecache
我能够使用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

能做到吗?

解决方法

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版本稍微懒一些;与列表相比,它的内存占用量较小,因为它可以按照迭代器的要求将字符串分离开。