当用户输入CHAIN_ID
和RES_POSITION
时,我想返回AA_code
。
CHAIN_ID
是CHAIN
标记的子元素,RES_POSITION
和AA_CODE
是
RESIDUE
标记的子元素。RESIDUE
标记也是CHAIN
的子元素
标签。你知道吗
我的代码只返回AA_CODE
到CHAIN_ID = "A"
为止
RES_POSITION = "370"
。
但是它不会返回其他CHAIN_IDs
,而是
它应该会回来。我不明白为什么,任何帮助都可以
感谢你。你知道吗
我在用Elementtree。你知道吗
XML示例:
<RESIDUE>
<RES_POSITION>370</RES_POSITION>
<AA_CODE>G</AA_CODE>
</RESIDUE>
</CHAIN>
<CHAIN>
<CHAIN_ID>B</CHAIN_ID>
<RESIDUE>
<RES_POSITION>371</RES_POSITION>
<AA_CODE>S</AA_CODE>
</RESIDUE>
My code which returns true result:
chain = [seq for seq in SEQ.findall('CHAIN') if seq.findtext('CHAIN_ID') == "A"]
print(chain)
sequence = [res for res in SEQ.find('CHAIN') if res.findtext('RES_POSITION') == "370"]
print(sequence)
for seq in chain:
for res in sequence:
if res in seq:
print(res.findtext('AA_CODE'))
退货:
[<Element 'CHAIN' at 0x0000019203C83138>]
[<Element 'RESIDUE' at 0x00000192040E4C78>]
G
My code for CHAIN_ID as B:
chain = [seq for seq in SEQ.findall('CHAIN') if seq.findtext('CHAIN_ID') == "B"]
print(chain)
sequence = [res for res in SEQ.find('CHAIN') if res.findtext('RES_POSITION') == "371"]
print(sequence)
for seq in chain:
for res in sequence:
if res in seq:
print(res.findtext('AA_CODE'))
退货:
[<Element 'CHAIN' at 0x000002EFB2254DB8>]
[]
在这里,您编写
SEQ.find(...)
而不是SEQ.findall(...)
。你知道吗这是你想要的吗?find()只在XML文件中查找CHAIN的第一个匹配项,我猜,对于找到的元素,行的第二部分(res\u position==371)将计算为False,因此sequence将以空列表结束。你知道吗
另外,虽然findall返回CHAIN元素,但findall只返回CHAIN子元素,这需要调整generator语句的if部分。你知道吗
下面是我实际测试过的一些代码;-):
还有一个建议-试试这个:
这样做效率更高,因为它只遍历整个数据一次,不需要嵌套for循环。你知道吗
相关问题 更多 >
编程相关推荐