3

我有一个大的制表符分隔的 csv 文件,格式如下:

#mirbase_acc    mirna_name  gene_id gene_symbol transcript_id   ext_transcript_id   mirna_alignment gene_alignment  mirna_start mirna_end   gene_start  gene_end    genome_coordinates  conservation    align_score seed_cat    energy  mirsvr_score

我想做的是遍历行并根据“gene_id”字段中的数据(字符串)选择项目,然后将这些行复制到一个新文件中。

我是一个蟒蛇菜鸟,并认为这是弄湿我的脚的好方法,但它比看起来更难!我一直在尝试使用 csv 包来操作文件,使用 dictreader 和 dictwriter 读写基本的东西。如果有人能帮我想出一个迭代搜索方面的模板,我将不胜感激。到目前为止,我有:

import csv

f = open("C:\Documents and Settings\Administrator\Desktop\miRNA Scripting\mirna_predictions_short.txt", "r")
reader = csv.DictReader(f, delimiter='\t')
writer = open("output.txt",'wb')
writer = csv.writer(writer, delimiter='\t')

然后是迭代位,bleurgh:

for row in reader:
    if reader.gene_id == str(CG11710):
        writer.writerow

这显然行不通。关于更好地构建这个结构的任何想法?

4

2 回答 2

4

您快到了!代码几乎是正确的:)


访问 dicts 是这样的:

some_dict['some_key']

代替:

some_object.some_attribute

创建字符串不是用引号来完成的,str(...)而是用引号来完成的CG11710


在你的情况下:

for row in reader:
    if row['gene_id'] == 'CG11710':
        writer.writerow(row)
于 2012-07-20T18:05:06.690 回答
0

python 中的字典的寻址方式类似于字典['key']。所以对你来说它是 reader['gene_id']。字符串也用引号“text”声明,不像str(text)。str(text) 将尝试将存储在变量 text 中的任何内容转换为字符串,这不是我认为您想要的。writer.writerow 也是一个函数,函数接受参数,所以你需要做 writer.writerow(row)。

于 2012-07-20T18:06:37.673 回答