2

我一直在使用

for item in dictlist:
    print>>working_outfile, item

集合列表打印到 .txt 文件并使用 excel 打开它,然后我可以将列表转换为逗号分隔的文件,从而创建电子表格。

问题是,当我打开这个时,我一直在手动替换第一个左括号和右括号、所有撇号、“set [”和右括号字符,以清理展开的外观床单。

关于如何修复此打印的任何建议或指示,以便该程序的其他用户不必学习如何查找和替换所有这些字符?

编辑:它最终使输出看起来像这样:

('aaa' | set(['stuff' | 'eggs' | 'spam']))

('bbb' | set(['stuff' | 'eggs' | 'spam']))

('ccc' | set(['stuff' | 'spam']))

在哪里 | 是下一个单元格

而且我要:

啊!东西| 鸡蛋| 高分辨率照片| CLIPARTO 垃圾邮件

bbb | 东西| 鸡蛋| 高分辨率照片| CLIPARTO 垃圾邮件

抄送 | 东西| 垃圾邮件

打印字典列表的示例是:

[('gcagag', set(['FlyingFox mef2d 上游 a1', '长臂猿 mef2a 上游 a1', '大象 mef2d 上游 a1', '大猩猩 mef2c 上游 a1', '长臂猿 mef2c 上游 a1', '猴子 mef2d 上游 a1' , '大猩猩 mef2a 上游 a1', '恒河猴 mef2c 上游 a1', 'MouseLemur mef2d 上游 a1', 'BrownBat mef2d 上游 a1', '海豚 mef2d 上游 a1', '功夫熊猫!mef2d 上游 a1', '犰狳mef2d 上游 a1'、'黑猩猩 mef2d 上游 a1'、'黑猩猩 mef2d 上游 a1'、'狨猴 mef2d 上游 a1'、'兔子 mef2d 上游 a1'、'EuroShrew mef2d 上游 a1'、'羊驼 mef2d 上游 a1'、'黑猩猩 mef2c上游 a1', 'EuroHedgeHog mef2d 上游 a1', '狗 mef2d 上游 a1'、'鼠标 mef2d 上游 a1'、'长臂猿 mef2d 上游 a1'、'大鼠 mef2d 上游 a1'、'大猩猩 mef2d 上游 a1'、'猩猩 mef2d 上游 a1'、'人类 mef2d 上游 a1']) , ('aaataa', set(['鼠标 mef2c 上游 a1', '羊驼 mef2a 上游 a1', '马 mef2a 上游 a1', '负鼠 mef2a 上游 a1', '长臂猿 mef2a 上游 a1', 'MouseLemur mef2a 上游 a1' , '大象 mef2a 上游 a1', 'GuineaPig mef2a 上游 a1', '大鼠 mef2d 上游 a1', '海豚 mef2a 上游 a1', '大猩猩 mef2a 上游 a1', '恒河猴 mef2c 上游 a1', '老鼠 mef2a 上游 a1', '狗 mef2c 上游 a1','人类 mef2a 上游 a1','黑猩猩 mef2a 上游 a1','猩猩 mef2a 上游 a1']))]

请注意这里有 2 个项目及其关联的集合。实际的 dictlist 有 500-40000 个项目,所以这只是一个小切口

4

3 回答 3

2

看起来您有一个元组列表,其中每个元组由一个字符串和一个集合组成。因此,要正确使用 CSV 编写器,您需要每个元组都是“扁平的”:

import csv
writer = csv.writer(open('output.csv', 'wb'))

for item in mydata:  # mydata is your list of tuples, so item is a tuple
    row = [item[0]] + list(item[1])
    writer.writerow(row)
于 2012-04-05T21:13:16.033 回答
2

您可以使用 csv 模块。http://docs.python.org/library/csv.html#csv.writer

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=',')
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

与您的代码相关(在查看 print dictlist 的输出后更新)。

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=',')
>>> for item in dictlist:
        tmp = [item(0)]       
        tmp.extend(item[1])
        spamWriter.writerow(tmp)
于 2012-04-05T20:03:44.467 回答
0

如果您只想将数字列表作为 CSV,您可以执行以下操作

>>> somelist=[set(random.sample(xrange(1,100),4)) for i in range(1,5)]
>>> out = repr(somelist).translate(None,"([)]").replace("set","")
'8, 98, 91, 10, 27, 3, 85, 37, 64, 33, 11, 69, 32, 83, 85, 38'

然后,您可以将字符串写入文件。

或者,如果您的字符串可能包含作为表示的一部分添加的字符,您也可以将集合扩展为数字或字符串的列表

>>> somelist=[set(random.sample(xrange(1,100),4)) for i in range(1,5)]
>>> [e for s in somelist for e in s]
[17, 43, 63, 97, 16, 65, 58, 11, 49, 10, 91, 95, 41, 20, 85, 70]
>>> 

您也可以使用csv模块将数据写入文件

来自 OP 的评论,因为他想要不同行中的集合,这是一个更新

>>> fin=open('somecsv.csv', 'wb')
>>> csvwriter = csv.writer(open('somecsv.csv', 'wb'), delimiter=',')
>>> for s in somelist:
    csvwriter.writerow(list(s))
>>> fin.close()
于 2012-04-05T20:08:47.890 回答