Python:将元组列表转换为csv

时间:2018-06-03 11:57:14

标签: python

目前无法输出带有列表的元组以在csv上列出。如果此列表的长度> 1,由于某种原因,它被转换为字符串。

def storePPTrainingData(ppTrainingData,tweetDataFile):
    import csv
    with open(tweetDataFile,'wb') as csvfile:
        linewriter=csv.writer(csvfile,delimiter=',',quotechar="\"")
        for tweet in ppTrainingData:
            try: 
                linewriter.writerow([tweet[0],tweet[1]])
            except Exception,e:
                print e

参见ppTrainingData:

ppTrainingData[:1] = [(['bummer', 'got', 'david', 'third', 'day'], 0)]

输出为CSV时:

"['bummer', 'got', 'david', 'third', 'day']",0

任何指针都很棒,因为想将list + label输入到程序中。 ppTrainingData是一个包含20k处理元组的列表。

2 个答案:

答案 0 :(得分:1)

在输出csv文件中,0也是一个字符串。那就是csv是什么;一个文本文件。在阅读其中时,Python或Pandas或任何其他框架可能会尝试将其所看到的内容转换为类型。在你的情况下,0可能会被转换,但列表不会。为方便起见,我使用了熊猫:

>>> tweet = [(['bummer', 'got', 'david', 'third', 'day'], 0)]
>>> df = pd.DataFrame(tweet)
>>> df.to_csv("j.csv")
>>> df = pd.read_csv("j.csv")
>>> df['0'].values[0] # this is just because pandas returns arrays
"['bummer', 'got', 'david', 'third', 'day']" # a string!
>>> lst = eval(df['0'].values[0])
>>> lst, type(lst)
(['bummer', 'got', 'david', 'third', 'day'], <class 'list'>)

阅读时,您可以尝试使用eval或其他方法,但不可能避免编写字符串。你可以避免使用引号,但这似乎很麻烦。

或者,您可以考虑取消序列:

>>> tweet[0][0] + [tweet[0][1]] # or something similar
['bummer', 'got', 'david', 'third', 'day', 0]

然后将其写入csv。阅读时,您可以将除最后一个元素之外的所有元素都放到列表中,将最后一个元素放到另一个元素中,并使用一些元组解包魔法:

>>> lst
['bummer', 'got', 'david', 'third', 'day', 0]
>>> *new, zero = lst
>>> new
['bummer', 'got', 'david', 'third', 'day']
>>> zero
0
>>> res = (new, zero)
>>> res
(['bummer', 'got', 'david', 'third', 'day'], 0)

答案 1 :(得分:0)

我不确定你要写入csv文件的内容。我会做类似的事情:

for tweet in ppTrainingData:
    # tweet is something like (['bummer', 'got', 'david', 'third', 'day'], 0)
    words, number = tweet
    # words is something like ['bummer', 'got', 'david', 'third', 'day']
    linewriter.writerow(words + [number])
    # we have written 6 columns to csv file : "bummer","got","david","third","day",0