是否可以使用csv.writer将数据写入变量而不是文件?
我希望我能做到这样的事情:
data = ''
csv.writer(data)
# ...... (I have removed the csv processing code for brevity)
message = EmailMessage('Invoice for 2012', 'h', 'noreply@test.co.uk', ['test@test.co.uk'])
message.attach('invoice.csv', data, 'text/csv')
message.send()
当我执行代码时,我收到以下错误:
argument 1 must have a "write" method
答案 0 :(得分:12)
csv.writer
类需要类似文件的对象,使用.write()
方法。这里最好StringIO
class:
from cStringIO import StringIO
data = StringIO()
csv.writer(data)
# write your stuff
message = EmailMessage('Invoice for 2012', 'h', 'noreply@test.co.uk', ['test@test.co.uk'])
message.attach('invoice.csv', data.getvalue(), 'text/csv')
message.send()
我在那里使用了StringIO
模块的C变体;优点是速度,缺点是您可以将每个实例仅用作可写或可读文件。由于你所做的只是在检索书面数据之前写信,所以没关系。
答案 1 :(得分:5)
只要您需要类似文件的对象(使用write
方法)并且不想在文件系统中创建实际文件,就可以始终使用StringIO
。
此内存文件方法的一个优点是I / O比实际存储后端快得多。如果您想要更快,可以使用cStringIO
。请注意,cStringIO
并非始终可用,因此您可以执行类似
try:
import cStringIO as StringIO
except ImportError:
import StringIO
答案 2 :(得分:1)
rsha:~$ curl 100.105.***.***:8888
<html><body><h1>It works!</h1></body></html>
已在Python 3中删除。
改为像这样使用io.StringIO:
cStringIO
您的数据在这里