目前无法输出带有列表的元组以在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处理元组的列表。
答案 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