Python:将tuple w list转换为cs

2024-06-06 19:45:09 发布

您现在位置:Python中文网/ 问答频道 /正文

当前无法在csv上输出具有list-to-list的元组。如果此列表的长度大于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

任何指针将是伟大的,因为想输入列表+标签到程序中。ppTrainingData是一个由20k个处理过的元组组成的列表。你知道吗


Tags: csvtocsvfile列表listtweet元组david
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

相关问题 更多 >