【问题标题】:Foor loop over a string of strings in BiopythonFor 循环遍历 Biopython 中的一串字符串
【发布时间】:2015-01-09 11:25:54
【问题描述】:

我编写了以下代码从 NCBI 下载多个序列。

import numpy as np
from Bio import Entrez
Entrez.email ="user@example.com"
data = np.loadtxt('/home/Documents/XXX.txt', dtype="string")
data
array(['YP_615060', 'YP_615061', 'YP_615062', ..., 'YP_611146',
   'YP_611148', 'YP_611150'], 
  dtype='|S12')
ids=data[:10]
ids_1=data[10:20]
ids_1=",".join(ids_1)
ids_2=data[20:30]
ids_2=",".join(ids_2)
total=(ids, ids_1, ids_2)
for c in total:
    handle = Entrez.efetch(db="protein", id=c, rettype="fasta", retmode="txt")
handle.read()

我收到一个错误

 File "<stdin>", line 3
handle.read()
     ^
SyntaxError: invalid syntax

我想我写错了'foor'循环,但我不知道有什么问题。这应该是一个微不足道的问题,但我找不到解决方法。

如果我测试 for 循环并且我不调用

handle.read()

运行

>>>for c in total:
...     handle=Entrez.efetch(db="protein", id=c, rettype="fasta", retmode="txt")
... 

for 循环仍在等待某些东西。我在这里错过了什么?

【问题讨论】:

  • 试试record = Entrez.read(handle)(见documentation)
  • 我找不到任何语法错误。也许它在您的代码的前一行?行号很低,您确定它是正确的文件吗?
  • @efrem 注意,handle.read() 不是循环块的一部分。对吗?
  • @ÁlvaroGómez 看起来像是一个交互式会话的混合输入和输出。

标签: python loops for-loop biopython


【解决方案1】:

这是一个疯狂的猜测,但您的代码看起来像是来自交互式会话的混合输入和输出,我可以在交互式模式下粘贴代码块时重现您的错误:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in range(10):
...     print i
... print "done"
  File "<stdin>", line 3
    print "done"
        ^
SyntaxError: invalid syntax

请尝试仅粘贴for 循环及其主体,然后按回车键(两次),然后粘贴handle.read() 行。 (也就是说,假设这行不打算成为循环的一部分;如果是,则修复缩进。)或者,将所有代码放入一个文件并使用python filename.py 运行该文件。

【讨论】:

  • 你是对的。我更新了我的问题。我不明白为什么 for 循环一直在等待命令。不应该只为字符串中的每个元素运行命令并停止吗?
  • @efrem 真的在“等待”吗?使用缩进粘贴代码时,您必须按两次回车键才能执行它。或者那部分代码可能很慢......
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 2021-04-02
  • 2014-01-29
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多