如何在没有定义任何物理文件/路径的情况下虚拟创建 csv 文件?

How to create a csv file virtually without any physical file / path defined?

需要创建一个csv文件并将其转换成类似字节的数据,以便作为EDI doc发送。我试图在没有物理文件的情况下实现这一点,因为 location/path 是未知的。让我知道我们是否可以实现任何目标。

with open(
    "/home/some path/*.dat", "r+", newline="\n"
) as write_f:
    data_file = csv.writer(write_f, delimiter=';')
    header_vals = ["header values"]

    query = """data fetching query"""

    data_file.writerow(header_vals)
    self.env.cr.execute(query)
    data_vals = self.env.cr.fetchall()
    data_file.writerows(data_vals)
    po_data = write_f.read(1024)

return po_data

尝试 1:尝试 IO 对象而不是路径(BytesIO/StringIO)

data_file = BytesIO()
data_write = csv.writer(data_file, delimiter=';')

header_vals = ["header values"]

query = """data fetching query"""

data_write.writerow(header_vals)
self.env.cr.execute(query)
data_vals = self.env.cr.fetchall()
data_write.writerows(data_vals)

在 writerow 处收到错误:TypeError:需要类似字节的对象,而不是 'str'

BytesIO 的行为类似于二进制 (!) 模式下的文件。您需要向其中写入字节。

但是csv.writer不能写字节,它只能写字符串。这就是您看到的错误消息。

from io import StringIO

buffer = StringIO()
writer = csv.writer(buffer, delimiter=';')

header_vals = ['column_1', 'column_2']
writer.writerow(header_vals)

print(buffer.getvalue())

# => 'column_1;column_2\r\n'