在Python中使用CSV写入编码问题

时间:2018-01-25 14:14:00

标签: python excel postgresql csv encoding

我试图从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上的文本导入时,存在一个问题:划分列的行位于文本上,如下所示

enter image description here

(我隐藏了一些数据,但你明白了这一点)

当我在Notepad ++之前/之后比较文件时,编码似乎是相同的(UCS-2 Little Endian),但我可以注意到最新文件的第一个字母上的奇怪标记

enter image description here

我该怎么办?

0 个答案:

没有答案