我的代码存在问题,我花了很长时间才解决它,我无法修复它:
我有一个这样的文件:
Sub saver()
Dim fn As String
Dim l As Long
Dim wb As Workbook
Set wb = ActiveWorkbook
fn = wb.FullName
l = InStrRev(fn, ".")
fn = Left(fn, l)
fn = fn & "txt"
wb.SaveAs Filename:=fn, FileFormat:=xlText
wb.Close
End Sub
我想要做的是使用第八列上的值对行进行分组,然后提取第六列的相应值并找到它们的最大值和最小值。
像这样:
ATOM 1375 N PHE F 411 81.522 91.212 98.734 1.00 0.00 N
ATOM 1376 H PHE F 411 82.393 91.667 97.546 1.00 0.00 H
ATOM 1377 CA PHE F 411 80.451 91.974 95.377 1.00 0.00 C
ATOM 1378 CB PHE F 411 80.968 93.339 100.842 1.00 0.00 C
ATOM 1379 CG PHE F 411 81.813 93.277 102.083 1.00 0.00 C
ATOM 1381 HD1 PHE F 411 83.566 92.729 105.124 1.00 0.00 H
我想要的输出是:
Group 1 8th column values from 95 to 100
ATOM 1375 N PHE F 411 81.522 91.212 98.734 1.00 0.00 N
ATOM 1376 H PHE F 411 82.393 91.667 97.546 1.00 0.00 H
ATOM 1377 CA PHE F 411 80.451 91.974 95.377 1.00 0.00 C
第二组 - 从100到105
Min-80.451
Max-82.393
依旧等等
这是我在python中的代码:
Mix - 80.968
Max - 83.566
我得到的输出是所有值的最小值和最大值,如
def get_x(file):
x=[]
for line in file:
new_line=line.split()
for z in range(80, 140, 2):
if ( float(new_line[8]) >z and float(new_line[8])<z+2):
x.append(float(new_line[6]))
else:
pass
maxx=max(x)
minx=min(x)
print maxx, minx
感谢任何帮助:)
提前致谢
答案 0 :(得分:0)
以下是我放在一起的代码,可以满足您的需求。我会看一下map
和filter
的python文档,这对于做这样的事情非常方便。
text = """ATOM 1375 N PHE F 411 81.522 91.212 98.734 1.00 0.00 N
ATOM 1376 H PHE F 411 82.393 91.667 97.546 1.00 0.00 H
ATOM 1377 CA PHE F 411 80.451 91.974 95.377 1.00 0.00 C
ATOM 1378 CB PHE F 411 80.968 93.339 100.842 1.00 0.00 C
ATOM 1379 CG PHE F 411 81.813 93.277 102.083 1.00 0.00 C
ATOM 1381 HD1 PHE F 411 83.566 92.729 105.124 1.00 0.00 H """
lines = text.split('\n')
data = [line.split() for line in lines]
groups = [
(95, 100),
(100, 105),
]
for i in range(len(groups)):
gMin, gMax = groups[i]
results = filter(lambda x: gMin <= float(x[8]) < gMax, data)
results = map(lambda x: float(x[6]), results)
print "Group", i+1, "8th column values from", gMin, "to", gMax
print "Min -", min(results)
print "Max -", max(results)
print ""
这是输出:
Group 1 8th column values from 95 to 100
Min - 80.451
Max - 82.393
Group 2 8th column values from 100 to 105
Min - 80.968
Max - 81.813
此代码效率低下,因为它不会删除以前组的结果。如果你需要增加的效率让我知道。