我有一个包含以下数据的文件:
line EF1 1 F Flu 5.7 3.221 9.332
line A2 1 C Car 3.2 5.22 1.22
line A1 1 C Car 3.11 4.21 2.13
line HF1 1 H Hyd 7.11 5.11 7.11
line EE2 1 F Flu 5.7 3.221 9.332
line A2 2 C Car 3.2 5.22 1.22
line EF1 2 F Flu 5.7 3.221 9.332
line EE2 2 F Flu 5.7 3.221 9.332
line A1 2 C Car 3.11 4.21 2.13
line HE2 2 H Hyd 7.11 5.11 7.11
…1000多行。在
这里第3列表示链号。
现在我创建了不同的列表,分别命名为:EF
、EE
、H
和{EF1
和HE1
都来自同一个chain number
,那么在'EF list'
中写{chain number
中只有'EF1'
而没有{'ace list'
。在
期望输出为:
^{pr2}$现在我试着
inp = filename.read().strip().split('\n')
for line in map(str.split,inp):
codeName = line[1]
shortName = line[3]
现在作为一个菜鸟,我真的很困惑,我如何才能构造一个if loop
来完成这个检查。
请提供一些想法,我如何才能在这方面取得进展!!
(我第一次被误认为是格式错误。纠正了!)在
我不认为你真的想要一个for循环。。。在
现在您有了一个行的列表,这些行被拆分成列
下一步,你想把它们分成第二列相同的行,对吗?在
^{pr2}$现在,您有一个组的列表,每个组都是一个行的列表;您的数据如下所示:
现在你可以检查一下你真正想知道的是,对于每组中的每个EF,是否有一个匹配的EH。我将为此创建一个助手函数:
剩下的就简单明了了:
……我想应该就是这样!我不会保证这段代码会立即运行,但它至少应该给你一个好的起点
第一次通过文件:
在我看来,最关键的部分是如何识别哪种形式的成对。我使用了以下代码片段:
基本上,
"".join(splitline[1:3])[1:]
所做的就是从HF1 1
生成标识符字符串F11
(它省略了第一个字符),如果它只出现在“F”中,或者同时出现在“H”中(反之亦然),则基本上应该测试它。在在本例中,
EF1 with chain 1
和HF1 with chain 1
都会产生标识符F11
。第一次出现这些情况时,它设置categories['F11'] = 1
。当它找到对时,它设置categories['F11'] = 2
如果我们使用一次或者两次为这个结果建立一个字典。在
建立了分类字典之后,我们可以下次再浏览该文件:
如果在}。在
categories
中,一个标识符的值是1
,那么我们就知道该行应该放在ace
中,如果该值是2
,那么我们就知道应该将该项写入F
或{这个解决方案将是相当快的,因为我们正在处理字典;如果您想维护列表中的顺序,请告诉我,然后我可以相应地更新。在
代码如下:
^{pr2}$现在您可以通过
result["H"]
、result["F"]
和result["ace"]
来访问这些组。在下面是打印结果的代码:
您的代码需要看起来更像这样:
您根本无法打开文件,map()也没有真正帮助您。在
相关问题 更多 >
编程相关推荐