我编写了一个函数,将查询集转换为CSV文件,然后通过电子邮件发送给用户。由于不需要在系统上存储文件,我决定使用Tempfile对象。 然而,尽管我在写这些对象方面取得了成功,但我无法阅读它们 - 这使我无法通过电子邮件将其作为附件发送
columns = instances[0].get_columns
# create tempfile, in TEXT (t) mode so as not to trip up the
# csv module, which cant handle binary data.
file = tempfile.NamedTemporaryFile(mode='wt')
try:
writer = csv.writer(file)
writer.writerow([field[0] for field in columns])
for instance in instances:
row = [getattr(instance, str(field[0])) for field in columns]
# email the file
body = 'The exported file has been included as a attachment.'
email = EmailMessage(
subject='CSV Export',
from_email='******',
to=['*****'],
body=body,
)
email.attach('export.csv', file, 'text/csv')
email.send()
这会触发以下错误: '_io.TextIOWrapper'对象没有属性'splitlines'
经过一些谷歌搜索后,似乎我必须.read()
该文件
但是,新代码(email.attach('export.csv', file.read(), 'text/csv')
UnsuportedOperation:not readable` error。
其他帖子提示,除了.read()之外,我还需要使用file.seek(0, os.SEEK_END)
“回放”文件,但not readable error
会一直触发。
如果我删除file.read()
但保留file.seek(0, os.SEEK_END)
这会导致返回'_io.TextIOWrapper' object has no attribute 'splitlines'
错误。
有谁知道我做错了什么?