【发布时间】:2015-06-12 23:13:58
【问题描述】:
我正在努力寻找一种有效的方法来搜索文件,然后在该文件中输出特定数量的行。所以假设我有一个名为“mc_coordinates”的文件,我想从中提取信息。它详细说明了给定“步骤”处原子的坐标。该文件的组织方式如下:
235
INITIAL BOX 1, STEP 1
C 12.7908790847 2.8828150218 1.1868087958
F 11.8993427046 1.8104266120 1.3121312895
F 13.8944796514 2.3931204072 0.4205213241
H 12.2211496090 3.7216596131 0.7243429292
H 13.2020314728 3.1740947812 2.1515988338
C 12.7759828577 3.6624296172 15.2649736115
F 11.9718262161 4.3758674409 16.1755975367
F 12.3319038697 2.3994507343 15.0709447687
H 12.7017245825 4.2254002044 14.2724601980
H 13.8483690007 3.6371660190 15.6480138479
澄清:初始框(步骤号)。在每个“步骤”中,我们记录每个原子的位置。我的问题是我只对 48 的倍数的步骤感兴趣,因为这些是我有兴趣观察的坐标。所以,这意味着我必须开发以下代码:
1) 找到“INITIAL BOX 1”。
2) 取 INITAL BOX STEP # 行之前的行,在本例中为 235,然后将其除以 5 并输出此信息
3) 打印从“C”开始的每个原子坐标,直到我到达“INITIAL BOX 2”之前行中的唯一数字
4)然后我需要再次在我的文件中搜索“INITIAL BOX 49”并基本上重复步骤 2,取数字,除以 5,输出此信息,并打印/输出所有坐标,直到我到达唯一“初始框 50”之前的编号。
这个过程会重复大约 600 次。这是我目前所拥有的:
fo = open("mc_coordinates")
lines = fo.readlines()
for line in lines:
print lines.find(INITIAL)
但这给了我错误,甚至没有开始做我需要的工作。任何提示或帮助将不胜感激!谢谢! 编辑:示例输出
47 # which is 235/5
C 12.7908790847 2.8828150218 1.1868087958
F 11.8993427046 1.8104266120 1.3121312895
F 13.8944796514 2.3931204072 0.4205213241
H 12.2211496090 3.7216596131 0.7243429292
H 13.2020314728 3.1740947812 2.1515988338
C 12.7759828577 3.6624296172 15.2649736115
F 11.9718262161 4.3758674409 16.1755975367
F 12.3319038697 2.3994507343 15.0709447687
H 12.7017245825 4.2254002044 14.2724601980
H 13.8483690007 3.6371660190 15.6480138479
@Bharadwa 代码生成:
47.0
C 12.7908790847 2.8828150218 1.1868087958
F 11.8993427046 1.8104266120 1.3121312895
F 13.8944796514 2.3931204072 0.4205213241
H 12.2211496090 3.7216596131 0.7243429292
H 13.2020314728 3.1740947812 2.1515988338
C 12.7759828577 3.6624296172 15.2649736115
F 11.9718262161 4.3758674409 16.1755975367
F 12.3319038697 2.3994507343 15.0709447687
H 12.7017245825 4.2254002044 14.2724601980
H 13.8483690007 3.6371660190 15.6480138479
BOX 1, STEP 24
C 12.4921773110 2.8286307659 1.1644437594
F 11.6006113644 1.7562423561 1.2895557390
F 13.5960941031 2.3384787776 0.3989045637
H 11.9164523192 3.6676509395 0.7097873135
H 12.9031018802 3.1199105253 2.1293308523
C 12.4895445934 3.5818345553 14.9048344490
F 11.6838031267 4.2949649016 15.8142975674
F 12.0450334972 2.3193713672 14.7084532328
H 12.4010184199 4.1124983940 13.8958289702
H 13.5698640919 3.5405566993 15.2634094502
我需要:
47.0
C 12.7908790847 2.8828150218 1.1868087958
F 11.8993427046 1.8104266120 1.3121312895
F 13.8944796514 2.3931204072 0.4205213241
H 12.2211496090 3.7216596131 0.7243429292
H 13.2020314728 3.1740947812 2.1515988338
C 12.7759828577 3.6624296172 15.2649736115
F 11.9718262161 4.3758674409 16.1755975367
F 12.3319038697 2.3994507343 15.0709447687
H 12.7017245825 4.2254002044 14.2724601980
H 13.8483690007 3.6371660190 15.6480138479
48.0
BOX 1, STEP 48
C 12.6660795715 3.6355249989 15.1210670811
F 11.9116309909 4.3486553452 16.0735112076
F 12.2114308249 2.3730618108 14.9494564347
H 12.5221365040 4.1661888376 14.1184657979
H 13.7645020294 3.5942471429 15.4196208523
【问题讨论】:
-
这是简单的基本文本解析。让我这样说,如果我错了,请纠正我,1.每当我看到一个孤独的数字时,我将它除以 5。2.打印 INITIAL 之后以“c”开头的每一行,继续这个直到结束文件?
-
您会在输出中得到一些随机数,因为您正在打印查找的位置。此外,没有名为 INITIAL 的变量
-
不仅仅是“C”,还有每个原子位置,包括“F”和“H”。我想要我认为相关的“初始框”之后的每个原子坐标
-
如果您简单地向我解释这些步骤,我可能会为您提供帮助,我不需要有关您为什么需要显示某些数据的信息,而只需告诉我您希望输出的外观如何。示例输出表示赞赏
-
什么错误?
print lines.find(INITIAL)?您希望它做什么以及为什么?