python - 如何将输出文件转换为数组

标签 python arrays numpy pycharm

这可能是一个微不足道的问题,但我似乎找不到一个好的解决方案。

我有一个格式为“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/

相关文章:

python - 使用 numpy.interp 的线性插值

python - Numpy Correlate 不提供偏移量

python - 由 PyQt4 创建并在 python 中执行的 GUI 无法打开

python - 如何访问文件以在不同(非当前)目录中进行读/写?

javascript - 检查 JavaScript 变量是错误的还是空数组或对象的最有效方法是什么?

arrays - 如何获取多个数组的第 n 个元素?

c - C 中动态的、大小不可预测的数组

python - 如何用 '\0' 替换 '/0' ?

python - 在 numpy 数组中查找模式的最有效方法

python - OpenCv索引如何工作?