CSV.writerow在每个字符之间都有逗号?

时间:2014-02-27 17:31:52

标签: python csv numpy

我目前正在Python脚本中调用python脚本,并尝试将调用的输出保存在CSV文件中。但是,它会工作,但每个字符之间都有一个逗号,因此输出不正确。

造成这种情况的原因是什么?

import csv
import GetAlexRanking #External Method exposed here
import subprocess
import pandas as p
import tai
import numpy as np

loadData = lambda f: np.genfromtxt(open(f,'r'), delimiter=' ')
with open('train.tsv','rb') as tsvin, open('PageRanks.csv', 'wb') as csvout:
    tsvin = list(np.array(p.read_table('train.tsv'))[:,0])
    csvout = csv.writer(csvout)

    for row in tsvin:
        count = 0
        cmd = subprocess.Popen("python GetAlexRanking.py " + row ,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE,
                           shell=True)
        (output, err) = cmd.communicate()
        exit_code = cmd.wait()
        print exit_code #testing
        print output
        print err
        csvout.writerow(row + "\t" + output) #writing,error here
        count+=1

编辑:

在cmd中调用函数时返回的示例行,如"python GetAlexRanking.py www.google.com"所示:

www.google.com
AlexaTrafficRank:1
GooglePageRank:9

我希望将其保存在tsv中(添加空格以使格式更清晰,所有列仅由选项卡分隔:))

URL \t AlexaRank \t GoogleRank
www.google.com \t 1 \t 9

2 个答案:

答案 0 :(得分:3)

您正在将字符串传递给csv.write,然后将其解释为列表,然后按每个列表元素(即字符)对其进行拆分。我犯了很多次这个错误......

试试这个:

# add coustom code to split the row up into the values, hint user row.split()
csvout.writerow([row, output]) 

答案 1 :(得分:1)

看起来您希望输入既是列表又是输出。因此,让您的输入保留一组字符串并将其拆分为每行的列表。

返回的示例行显示为三行。这是否意味着它是一个带有列分隔符的长字符串?如果是这种情况,请拆分输出并插入标签。

  outrow = row # row is already a list
  outrow.append(output.split('\t'))
  csvout.writerow(outrow)

再看一下你的样本,看来你想要输出两个tsv行,一个带有“header”,另一个带有“rank”。因此(额外的线条便于阅读)

outlist = output.split('\t')
outname1 = outlist[1][0:outlist[1].index(':')-1]
outname2 = outlist[2][0:outlist[2].index(':')-1]
outrank1 = outlist[1][outlist[1].index(':')+1:]
outrank2 = outlist[2][outlist[2].index(':')+1:]
outrow1 = ['URL', outname1, outname2]
outrow2 = [outlist[0], outrank1, outrank2]

然后,您将编写两个输出行,因为您似乎已将其放入样本输出