【发布时间】:2015-11-11 23:12:01
【问题描述】:
我想基本上做到这一点:
f = open(genes_path, 'w')
for key, genes in key_genes.iteritems():
f.write(key)
for gene in genes:
f.write(",\t"+gene)
f.write("\n")
f.close()
得到这个:
key1、AT3G32920、AT3G33187、AT3G32940、AT3G32930、AT3G32980、AT3G32960
key2、AT3G32920、AT3G33187、AT3G32940、AT3G32930、
键可以是任何字符串(不带逗号),顺序在任何地方都无关紧要(我使用来自boltons 的 OrderedMultiDict 和列表以方便打印,但它真的没关系,可以是 dict 和设置为我所关心的),每行可以有不同数量的元素。
我似乎找不到任何可以完成这项非常简单任务的模块。 DictWriter 需要列/字段名称,因此this 无法回答我的问题。 Numpy 仅适用于矩形数组,并且填充引入了太多不必要的东西。我知道自己编写循环很容易,但我只是觉得这很常见,它会有自己的内置函数。
有时我只需要向人们发送大量事物列表(例如基因给不会编程的人),以便他们可以将其拉入 excel 添加或删除元素,然后将其发送回去,而我不必这样做还有什么。
有人知道有一个模块可以自动读取和写入这些乱七八糟的 dict-of-lists 文件吗?或者如果有充分的理由不存在这种情况?
我在想像pandas.read_csv(path, delimiter=",") 和pandas.DataFrame.to_csv(path, delimiter=",") 这样简单的东西。
基本原理
我之所以挑剔它是一个模块的单个功能,而不是我可以在纯 python 中非常轻松做到的事情,不是因为我很懒,而是因为当你使用来自具有良好文档的模块的某些内容对于某人来说更容易查看代码并准确了解其意图。即使任务是微不足道的,您仍然可以降低代码的复杂性。我认为编写自己的函数是特定于域的,而一个常见的读写例程应该是你import 的东西,如果有的话最好使用。 python 禅宗的一部分对吗?所以第二个问题真的是问“这是一项特定于域的任务吗?”,因为在我看来并非如此。
【问题讨论】:
-
您是否尝试过使用
csvmodule? -
@Two-BitAlchemist 那是 DictWriter 的来源,所以是的。
-
@sodiumnitrate 我不想明确写入 excel 格式,我想要 csv/text,因为这是通用的。
-
我的意思是,那么你正在做的应该工作。我会编写一个执行打印的函数,使用下面 Jake Griffin 的答案或您的代码,并在您需要打印某些内容时调用它。
标签: python dictionary io