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

Python csv.writer-是否可以写入变量?,python,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'

是否可以使用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()
import csv
import io

mem_file = io.StringIO()
writer = csv.writer(mem_file)

writer.writerow(['your', 'data', 'here'])

print(mem_file.getvalue())
当我执行代码时,我得到以下错误:

   argument 1 must have a "write" method

csv.writer
类需要一个类似文件的对象,该对象具有
.write()
方法。A最好在这里:

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变量;优点是速度,缺点是您只能将每个实例用作可写或可读文件。由于您所做的只是在检索写入的数据之前对其进行写入,这很好。

只要您需要类似文件的对象(使用
写入方法),并且不想在文件系统中创建实际文件,就可以随时使用

这种内存文件方法的一个优点是,I/O比使用真正的存储后端要快得多。如果你想更快,你可以使用。请注意,
cStringIO
并非始终可用,因此您可以执行以下操作

try:
    import cStringIO as StringIO
except ImportError:
    import StringIO
Python3.x和2.6+ Python3中删除了其他答案中描述的cStringIO

而是像这样使用:

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()
import csv
import io

mem_file = io.StringIO()
writer = csv.writer(mem_file)

writer.writerow(['your', 'data', 'here'])

print(mem_file.getvalue())
你的数据,在这里


你需要给我们完整的回溯;这将使我们更好地了解异常的原因。此外,被删除的csv处理代码看起来可能是导致问题的原因