这是一个复杂的制表符分隔文件的例子
ENTRY map0010\tNAME Glycolysis\tDESCRIPTION Glycolysis is the process of converting glucose into pyruvate\tCLASS Metabolism\tDISEASE H00071 Hereditary fructose intolerance\tH00072 Pyruvate dehydrogenase complex deficiency\tDBLINKS GO: 0006096 0006094
ENTRY map00020\tNAME Citrate cycle (TCA cycle)\tCLASS Metabolism; Carbohydrate Metabolism\tDISEASE H00073 Pyruvate carboxylase deficiency\tDBLINKS GO: 0006099\tREL_PATHWAY map00010 Glycolysis / Gluconeogenesis\tmap00053 Ascorbate and aldarate metabolism
我试图获得只包含一些字段的输出,例如:
^{pr2}$主要问题是并非所有的行都包含相同数量的字段,因此我需要删除,例如,包含字符串“DESCRIPTION”的字段,并在字段“CLASS”不存在的行中添加一个空字段。在
此外,对于某些字段,数据被分割成多个字段(f.i,第1行,疾病之后的字段包含疾病数据!)我需要加入他们。在
我试过:
input = open('file', 'r')
dict = ["ENTRY", "NAME", "CLASS", "DISEASE", "DBLINKS", "REL_PATHWAY"]
split_tab = []
output = []
for line in input:
split_tab.append(line.split('\t'))
for item in dict:
for element in split_tab:
if item in element:
output.append(element)
else:
output.append('\tNA\t')
但是它保留了所有的东西,不仅仅是dict中指定的元素。 你能帮帮我吗?在
你的台词
^{bq}$把事情搞砸了。你在单子里列一个单子。试试这个:
使用内置的csv库。你的工作会容易得多。在
对于一些示例代码:
特别注意听写器的设置。如果包含
restval
和extrasaction
字段,则使用起来更加容易。它们允许您传递一个字典,其值大于或小于编写者的预期值。在只需适当设置字段名,并设置读取器使用正确的方言。这可能包括添加您自己的,但是csv链接有关于如何添加的说明。在
编辑
在Rob发表评论后,我修改了这篇文章,以考虑到csv方言并不像我想象的那么强大。在
相关问题 更多 >
编程相关推荐