Python csv.writer - 是否可以写入变量?

时间:2012-09-01 14:46:35

标签: python

是否可以使用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

3 个答案:

答案 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)

Python 3.x和2.6 +

其他答案中所述的

rsha:~$ curl 100.105.***.***:8888 <html><body><h1>It works!</h1></body></html> 已在Python 3中删除。

改为像这样使用io.StringIO

cStringIO
  

您的数据在这里