我试图从PostgreSQL数据库中提取大量数据,然后将其写入CSV,但我得到了一个MemoryError。为此,我使用了Python StringIO模块,如果我将查询生成的有限数量的行放在一起就可以了。该文件已写入,并且在Excel中将其作为文本文件导入时没有问题。
因为它给了我这个错误,我试着像这样逐行写一个文件,用一个小函数来处理解码/编码:
def convert_and_write(out_stream, input_value):
output_value = input_value.decode('utf-8').encode('utf-16','ignore')
out_stream.write(output_value)
with open( filename, "w" ) as out_file:
for row in rs:
tmpstr = ""
for c in range( len( row ) ):
xx = str( row[c] ).replace("\"", "").replace( chr(9), " " )
tmpstr += xx + chr(9)
convert_and_write( out_file,
tmpstr.replace( "\n", "-" ).replace( "\r", " " )
)
convert_and_write( out_file, "\r\n" )
现在编写了文件,但是当我尝试将其作为Excel上的文本导入时,存在一个问题:划分列的行位于文本上,如下所示
(我隐藏了一些数据,但你明白了这一点)
当我在Notepad ++之前/之后比较文件时,编码似乎是相同的(UCS-2 Little Endian),但我可以注意到最新文件的第一个字母上的奇怪标记
我该怎么办?