繁体   English   中英

Python:将元组w列表转换为csv

[英]Python: Converting tuple w list to csv

目前在输出带有列表的元组到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是2万个已处理元组的列表。

在输出的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)

我不确定您要写入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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM