我想基本上做到这一点:
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列表文件?或者如果有一个很好的理由让它不存在?你知道吗
我在想一些非常简单的事情,比如pandas.read_csv(path, delimiter=",")
和pandas.DataFrame.to_csv(path, delimiter=",")
。你知道吗
基本原理
我之所以挑剔它是一个模块的单个函数,而不是我在纯python中可以非常容易地做的事情,并不是因为我懒惰,而是因为当你使用一个有良好文档的模块中的东西时,人们会更容易查看代码并准确地了解它的意图。即使任务有点琐碎,您仍然在降低代码的复杂性。我认为编写您自己的函数是特定于域的,而公共读写例程应该是您import
需要的,如果可用,最好使用它。是python禅宗的一部分吧?所以第二个问题是“这是一个特定领域的任务吗?”,因为我觉得不是这样。你知道吗
您可以将每一行构建为一个字符串并执行一次写入:
这仍然是自己做的,但它比您发布的代码更简洁。你知道吗
首先,我看不出原始循环有什么不好的地方(可以将其转换为函数,并使用^{} context manager 进行缩短)。但是,我提到了
csv
模块,因为它似乎几乎可以满足您的要求,不需要DictWriter
。你知道吗我假设你是这样开始的:
所以这个代码:
产生以下结果:
显然
如果您想对密钥进行排序,您可以这样做您的密钥将被排序,因为您使用的是有序结构,而我使用的是一个常规的内置dict。现在我们进入您需求的几乎部分。您正在使用,\t
作为分隔符。如果您尝试用csv.writer
执行此操作,它会抱怨分隔符应该是一个字符。这对我来说很有意义,因为csv文件通常是逗号分隔或制表符分隔的,而不是两者都是。分隔符只是为了便于机器处理而存在的,机器只需要一个字符(在其他任何地方都不需要引号)。你知道吗因此,我的最终答案是:如果您可以使用单字符分隔符(对于正常的CSV处理,这应该不是问题),请使用
csv
模块。否则,使用短循环。你知道吗相关问题 更多 >
编程相关推荐