这可能是一个微不足道的问题,但我似乎找不到一个好的解决方案。
我有一个格式为“output.file”的程序输出。它看起来像这样:
3cp0FH_A.pdb A 1 62 7.5635e+01 8.9632e+01 1.9255e+00 1.9154e+02 5.2270e+01 1.7820e+02 -9.6401e+01 -3.8095e+01 1.5210e+02 -5.4532e+01 2.6628e+01 -1.0989e+01 -8.1933e+01 -6.6642e-01 1.8158e+01 2.2515e+01 -5.9261e+00 6.8567e+00 7.2896e+00 1.2575e+01 -1.1400e+01 1.7467e+01 4.1609e+00 -6.0523e+00 -1.8691e+01 3.5305e+01 4.0516e+00 2.9715e+00 1.0701e+01 -1.3146e+01 -1.1101e+00
1xhdFH_A.pdb A 3 169 1.0565e+02 -9.1260e+01 -9.3580e+01 1.5947e+02 4.8274e+01 1.3447e+02 -1.5060e+02 -7.6796e+01 1.3185e+02 -5.3275e+01 2.5539e+01 -6.5738e+01 -6.6355e+01 4.8942e+01 -1.3249e+01 6.7675e+01 -1.2348e+01 -4.3005e+01 2.1516e+02 -2.3099e+01 -8.0767e+00 2.2402e+01 -5.9237e+01 4.4889e+00 -1.2909e+02 4.5721e+01 -9.9285e+01 5.9332e+01 -5.7431e+01 -3.6852e+01 -1.7430e+02
3c18FH_A.pdb A 5 285 1.2576e+02 6.3883e+00 1.3145e+01 8.2794e+01 -5.0494e+01 5.9305e+01 1.4713e+01 6.8420e+00 6.6720e+01 5.1087e+00 -1.7846e+01 7.4458e+00 -1.9514e+00 7.8637e+00 -2.9961e+00 -7.0192e+00 9.0216e-02 -7.2202e+00 1.4839e+01 -4.0826e+00 1.3694e+01 -2.8499e+00 4.2015e+00 -6.8598e-01 5.8514e+00 -7.3843e+00 5.2737e-02 -4.9425e-03 2.9360e+00 4.7973e+00 6.2879e+00
.
.
.
输出有超过 6000 行(每个 pdb 文件一行),我试图将其转换为格式为 [6000,35] 的数组,以便每一行都包含新文件的数据(此处为例如,这将是三个文件“3cp0FH_A.pdb、“1xhdFH_A.pdb”和“3c18FH_A.pdb”),每一列将是文件的一个数据点(前 4 列除外)。数组的第一行以上面的例子为例,看起来像这样:
[3cp0FH_A.pdb, A, 1, 62, 7.5635e+01, 8.9632e+01, 1.9255e+00, 1.9154e+02, 5.2270e+01, 1.7820e+02, -9.6401e+01, -3.8095e+01, 1.5210e+02, etc.]
我已经弄清楚如何将output.file作为列表获取,其中每个条目都是output.file的一行。我什至可以用逗号分隔这些值。所以如果我输入:
>>> list[0]
我会得到:
'3cp0FH_A.pdb,A,1,62,7.5635e+01,8.9632e+01,1.9255e+00,1.9154e+02,5.2270e+01,1.7820e+02,-9.6401e+01,-3.8095e+01,1.5210e+02,-5.4532e+01,2.6628e+01,-1.0989e+01,-8.1933e+01,-6.6642e-01,1.8158e+01,2.2515e+01,-5.9261e+00,6.8567e+00,7.2896e+00,1.2575e+01,-1.1400e+01,1.7467e+01,4.1609e+00,-6.0523e+00,-1.8691e+01,3.5305e+01,4.0516e+00,2.9715e+00,1.0701e+01,-1.3146e+01,-1.1101e+00\n'
我不知道如何将此列表转换为数组,以便每个用逗号分隔的字符串/值都位于其自己的列中。
最佳答案
所以现在您的列表索引是字符串,您真正想要的是它们成为包含所有数据点的列表。为此,您可以执行以下操作:
for i in range(len(input_list)):
new_row = input_list[i].split(',')
# Optionally, translate the numbers from column 4 on to floats
new_row[4:] = [float(v) for v in new_row[4:]]
input_list[i] = new_row
这将修改您的列表,以便它替换之前的列表。这也是一个纯 python 解决方案,不涉及 numpy(尽管这应该为您提供一些关于如何在需要时获得 numpy 解决方案的想法)。
关于python - 如何将输出文件转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59616429/