【问题标题】:How can I print a single row element in Python DictReader如何在 Python DictReader 中打印单行元素
【发布时间】:2020-11-20 10:40:04
【问题描述】:

我有一个查找 DNA 匹配项的程序。我们得到了一个单行文本文件,用于查找最长的 STR(短串联重复)序列,然后将结果与一个 .cvs 文件的数据库进行匹配,如下所示:

> name,AGATC,TTTTTTCT,AATG,TCTAG,GATA,TATC,GAAA,TCTG
> Albus,15,49,38,5,14,44,14,12 
> Draco,9,13,8,26,15,25,41,39
> Ginny,37,47,10,23,5,48,28,23
> Harry,46,49,48,29,15,5,28,40

在获得最长序列量的结果(作为整数)后,我试图在这个 cvs 文件中找到一个匹配项,并在我找到 STR 的匹配数字时打印第一列(名称)中的值。我正在使用print() 检查程序,它会打印“不匹配”,直到匹配的名称然后停止并出现以下错误代码:

Traceback (most recent call last):
    File "dna.py", line 37, in <module>
    main()
    File "dna.py", line 27, in main
    print(row[0])
KeyError: 0

我的程序可能找到了匹配项,但无法打印出来而不是退出。请你帮助我好吗? TIA

def main():
    for i in SEQ.keys():
        SEQ[i] = find_longest_sequence(i)
    print(SEQ.items())
    with open(sys.argv[1],'r') as f:
        db = csv.DictReader(f)
        for row in db:
            if int(row['AGATC']) == SEQ['AGATC'] and int(row['AATG']) == SEQ['AATG'] and int(row['TATC']) == SEQ['TATC']:
                print(row[0])
            else:
                print("No match")

【问题讨论】:

  • 你试过 print(row['name']) 吗?
  • @rodvictor 是的,我试过了,但也没有用。现在我正在为 cvs 文件的 eash 行创建一个字典列表,我将通过比较两个字典来比较结果。希望它有效
  • @rodvictor 肯定不起作用,因为结果只包含 STR 数字,cvs 文件也有名称行:/我可以比较字典的值吗?

标签: python python-3.x csv dictionary


【解决方案1】:

我用你提供的数据做了一个test.csv

name,AGATC,TTTTTTCT,AATG,TCTAG,GATA,TATC,GAAA,TCTG
Albus,15,49,38,5,14,44,14,12 
Draco,9,13,8,26,15,25,41,39
Ginny,37,47,10,23,5,48,28,23
Harry,46,49,48,29,15,5,28,40

然后使用以下代码(py csv-test.py test.csv)进行测试:

import csv
import sys

with open(sys.argv[1], "r") as f:
    db = csv.DictReader(f)
    for row in db:
        if int(row['AGATC']) == 15:
            print(row['name'])

结果是“阿不思”。

PS。与:

print(row[0])

我得到和你一样的 KeyError。

我错过了什么吗?

【讨论】:

  • 我找不到按照您的建议提取一个项目的方法,顺便说一下它在我的代码上也很有效。所以我不得不为解决方案实现不同的算法。剩下的唯一事情就是找到一种方法来比较这个字典的值和数据库中的有序字典。感谢你的回答。我要把这个添加到我的 sn-ps 中。
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多