2 回答

TA贡献1794条经验 获得超8个赞
尝试:
bert = [json.loads(line)['features'][0]['layers'][0]['values'] for line in f]
这样,您至少不会一次读取内存中的整个文件-也就是说,如果文件很大,您必须进一步处理存储的内容bert

TA贡献1788条经验 获得超4个赞
我在搜索类似问题时找到了这个解决方案。它不是在特定问题中投票最多的,但在我看来,它比任何东西都好。
这个想法很简单:不是保存一个字符串列表(文档中的每一行一个),而是保存一个引用每一行的文件索引位置列表,然后当你想访问它的内容时,你只需要seek
到这个记忆位置。为此,一个类LineSeekableFile
就派上用场了。
唯一的问题是您需要在整个过程中保持文件对象(而不是整个文件!)打开。
class LineSeekableFile:
def __init__(self, seekable):
self.fin = seekable
self.line_map = list() # Map from line index -> file position.
self.line_map.append(0)
while seekable.readline():
self.line_map.append(seekable.tell())
def __getitem__(self, index):
# NOTE: This assumes that you're not reading the file sequentially.
# For that, just use 'for line in file'.
self.fin.seek(self.line_map[index])
return self.fin.readline()
然后访问它:
b_file = bert_dir+"/output4layers.json"
fin = open(b_file, "rt")
BertSeekFile = LineSeekableFile(fin)
b_line = BertSeekFile[idx] #uses the __getitem__ method
fin.close()
添加回答
举报