Python - 在内存中生成csv文件,然后将其数据编码到base64中?
我需要在内存中生成类似数据的csv文件,然后将其编码为base64,因此我可以保存它。所以基本上我不想为此在硬盘上创建文件。现在我通过创建csv文件来解决这个问题,然后编码它的数据,保存它,然后只是简单地删除csv文件(因为它不再需要)。但是有没有办法跳过文件创建,但以同样的方式保存数据?我的意思是这些数据将被用来使用base64再次打开csv文件。Python - 在内存中生成csv文件,然后将其数据编码到base64中?
import base64
import csv
from StringIO import StringIO
import os
def test_binary(self):
mylist = [['a', 'b'], ['c', 'd']]
with open("test.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows(mylist)
myfile = open('test.csv', 'r')
stream = StringIO(myfile.read())
encoded = base64.b64encode(stream.getvalue())
self.test = encoded
myfile.close()
os.remove('test.csv')
如果我理解正确,您的最终目标是将列表转换为.csv格式的字符串,并对其进行base64编码。如果是这种情况,则根本不需要创建.csv文件。
import base64
mylist = [['a', 'b'], ['c', 'd']]
# Creating the csv formatted string
csv_line_length = len(max(mylist,key=len))
csv_string = ''
for row in mylist:
temp_row = ['"' + col + '"' for col in row]
while len(temp_row) < csv_line_length:
temp_row.append([])
csv_string += ','.join(temp_row) + '\n'
# Encoding the string to base64
encoded = base64.b64encode(csv_string.encode('utf-8'))
不要重新CSV,使用'csv'模块,而不是如,如果'col'中有引号,你的代码就会失败。 – jfs
你可以通过StringIO()
到CSV作家直接:
>>> import base64
>>> import csv
>>> from StringIO import StringIO
>>> mylist = [['a', 'b'], ['c', 'd']]
>>> f = StringIO()
>>> csv.writer(f).writerows(mylist)
>>> base64.b64encode(f.getvalue())
'YSxiDQpjLGQNCg=='
'''从io import StringIO''' – priyankvex
'from StringIO import StringIO' for python2 works,we do not know it is deprecated and whatnot – Drachenfels
降''test.csv''和使用'StringIO' – jfs