[英]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.