【问题标题】:Read csv content without loop无循环读取 csv 内容
【发布时间】:2014-09-20 20:17:15
【问题描述】:

我正在尝试将 csv 文件附加到消息并发送出去。

# i generated the file 'stats.csv' and it is there.
f = open('stats.csv')
filedata = csv.reader(f)
msg.attach('stats.csv', filedata, 'text/csv')

但我收到的每封电子邮件的附件只有这一行:

<_csv.reader object at 0x1b1e750>

如果我尝试

f = open('stats.csv')
msg.attach('stats.csv', f, 'text/csv')

我得到了

<open file 'stats.csv', mode 'r' at 0x1a76030>

内部附件。

我只想发送 csv 文件作为显示 csv 文件内容的附件。我究竟做错了什么?

【问题讨论】:

  • 我认为这个函数msg.attachfiledata 转换为一个字符串,这就是它打印的原因。就像您使用 print filedata 时一样。 msg 来自哪个班级?
  • 如果您尝试将csv 文件作为附件发送,我认为您甚至不需要使用csv.reader。您可以像对待任何其他文件一样对待它。
  • @t.pimentel msg 来自EmailMultiAlternatives
  • @g4ur4v 如果只发送f,我会在附件中收到&lt;open file 'stats.csv', mode 'r' at 0x1a76030&gt;
  • @t.pimentel attach 应该将其视为文件,因为我提供了text/csv,而不是转换为字符串。不应该吗?

标签: python django csv


【解决方案1】:
f = open('stats.csv', 'r+')
filedata = f.read()
msg.attach_alternative(filedata, "text/csv")

【讨论】:

  • 会很好,但我正在动态创建文件
  • 将其保存在临时位置并使用msg.attach_file
  • 保存并再次读入的开销太大。文件已经存在,问题是如何使附件显示其内容。
【解决方案2】:

我通过这样做解决了:

response = HttpResponse(content_type='text/csv')
writer = csv.writer(response)
msg.attach('stats.csv', response, 'text/csv')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多