如何在Python中使用BufferedWriter?

问题描述 投票:6回答:1

我面临以下问题:我正在尝试为供应链实现模拟器。这些将产生很多EPCIS事件(在RFID阅读器中发生的事件)。然后,应将这些事件写入csv文件,以便将其加载到任何数据库中并在其上运行分析算法。

模拟器是使用python实现的,可以正常工作。我现在想做的是将事件缓冲写入文件,以减少访问磁盘所需的时间。浏览python文档时,我偶然发现了io.BufferedWriter,这听起来和我要找的东西完全一样。无论如何,我不能完全正常工作。

这是我到目前为止所做的。我实现了CsvWriter类,该类继承自RawIOBase并管理文件句柄。实例化时,它会自己创建一个BufferedWriter作为raw参数(可能已经成为问题了吗?)

class CsvWriter(AbstractWriter):

    def __init__(self, filename):    
        self.filename = filename
        self.file = self.openFile()
        self.buffer = BufferedWriter(self, settings.WRITE_THRESHOLD)

[当我知道要写东西时,我将其称为write_buffered缓冲,看起来像这样:

def write_buffered(self, data_dict):    
        self.buffer.write(b';'.join(map(str, data_dict.values())) + '\n')

我认为需要在write类本身上实现的实际CsvWriter方法看起来像这样:

def write(self, data):
        if self.file.closed:
            self.file = self.openFile()

        return self.file.write(data)

问题是,当我尝试运行模拟器时,出现以下错误:

IOError: raw write() returned invalid length -1 (should have been between 0 and 78)

你们中的一个人对我有什么解决办法的线索吗?

python file buffer bufferedwriter
1个回答
0
投票

是否有可能从libc遇到原始错误情况,在Python中应该是返回None还是IOError异常? https://www.gnu.org/software/libc/manual/html_node/I_002fO-Primitives.html#index-write基础流应为原始流,并且https://docs.python.org/3.8/library/io.html#io.RawIOBase.write

© www.soinside.com 2019 - 2024. All rights reserved.