python:解码列表并将行写入 csv

python: decode list and write row into csv

正在尝试将 sql 查询写入 csv,但输出看起来像是经过编码的。当我尝试解码列表时出现错误。我在 csv 文件中得到的输出如下所示:

Visit ID    Source  Vid 1   Vid 2   Vid 3   Vid 4   Vid 5
['']                        
|[-9223368141428696960   u'O\x00&\x00O\x00'  u'E\x00n\x00t\x00e\x00r\x00t\x00a\x00i\x00n\x00m\x00e\x00n\x00t\x00']| 



from pandas import *
import pandas.io.sql as psql
import sqlite3
import pyodbc
import csv
import codecs
with open('vidPathingTest.csv', 'wb') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=',',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Visit ID','Source','Vid 1','Vid 2','Vid 3','Vid 4','Vid 5'])

    cstr = 'XX;SERVER=XX;UID=XX;PWD=XX;DATABASE=;Threading=1'
    cnxn = pyodbc.connect(cstr)
    cursor = cnxn.cursor()

    command = '''sql query'''



    df = psql.read_sql(command, cnxn)
    output_row = [""]

    for index, row in df.iterrows():

        prevID = row[0]
        source = row[1]
        vid = row[2]

        if index is 0:
            output_row.append(prevID, source, vid)
            continue
        else:
            prevID = output_row[0]

        if prevID is row[0]:
            output_row.append(vid)
        else:
            spamwriter.writerow([output_row[a].decode('utf-16-le') for a in output_row])
            output_row = [""]
            prevID = row[0]
            output_row = [prevID, source, vid]

    cnxn.close()

您的字符串中有空字节,您可以拆分、重新合并并写入:

spamwriter.writerow(["".join(a.split("\x00")) for a in output_row])

或简单地替换:

 spamwriter.writerow([a.replace("\x00","") for a in output_row])