如何读取和解析带有变体空间的文件作为 delim?

How can I read and parse files with variant spaces as delim?

我需要帮助解决这个问题:

我有一个充满 .txt 文件的目录,如下所示:

file1.no
file2.no
file3.no

每个文件都具有以下结构(我只关心 .txt 中的前两个“列”):


#POS SEQ  SCORE    QQ-INTERVAL     STD      MSA DATA
#The alpha parameter 0.75858
#The likelihood of the data given alpha and the tree is: 
#LL=-4797.62
    1     M  0.3821   [0.01331,0.5465]  0.4421    7/7
    2     E  0.4508   [0.05393,0.6788]  0.5331    7/7
    3     L  0.5334   [0.05393,0.6788]  0.6279    7/7
    4     G  0.5339   [0.05393,0.6788]   0.624    7/7

我想将它们全部解析成一个 DataFrame,同时还将列转换为每行的列表(即,第一列应转换为这样的字符串:["MELG"])。

但现在我 运行 陷入两个问题:

  1. 如何读取不同的文件并将它们全部附加到单个 DataFrame,以及如何从所述文件中的所有行中创建一个列

  2. 如何解析这些文件,因为几乎所有文件的列间距都不同。

我的输出应该是这样的:

|File |SEQ |SCORE|
| --- | ---| --- |
|File1|MELG|0.3821,0.4508,0.5334,0.5339|
|File2|AAHG|0.5412,1,2345,0.0241,0.5901|
|File3|LLKM|0.9812,0,2145,0.4142,0.4921|

因此,第一个 文件 (file1.no) 的第一个 现在是在一个列表中,在一行中包含该文件的所有信息,并且 DataFrame 每个文件都有一行。

欢迎任何帮助,在此先感谢。

这是一个适合您的示例代码:

using DataFrames

function parsefile(filename)
    l = readlines(filename)
    filter!(x -> !startswith(x, "#"), l)
    sl = split.(l)
    return (File=filename,
            SEQ=join(getindex.(sl, 2)),
            SCORE=parse.(Float64, getindex.(sl, 3)))
end

df = DataFrame()
foreach(fn -> push!(df, parsefile(fn)), ["file$i.no" for i in 1:3])

您的结果将在 df 数据框中。