如何在没有定义任何物理文件/路径的情况下虚拟创建 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'
需要创建一个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'