我有一个大的制表符分隔的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
这显然不起作用。关于更好的结构方法的任何想法??
答案 0 :(得分:4)
你快到了!代码几乎是正确的:)
访问dicts是这样的:
some_dict['some_key']
而不是:
some_object.some_attribute
使用str(...)
创建字符串,但使用CG11710
在你的情况下:
for row in reader:
if row['gene_id'] == 'CG11710':
writer.writerow(row)
答案 1 :(得分:0)
python中的字典像字典['key']一样被处理。所以对你而言,它是读者['gene_id']。字符串也用引号“text”声明,而不是str(text)。 str(text)会尝试将存储在变量文本中的内容转换为字符串,这不是我想要的。 writer.writerow也是一个函数,函数接受参数,因此你需要编写writer.writerow(row)。