如何读取和解析带有变体空间的文件作为 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"]
)。
但现在我 运行 陷入两个问题:
如何读取不同的文件并将它们全部附加到单个 DataFrame,以及如何从所述文件中的所有行中创建一个列
如何解析这些文件,因为几乎所有文件的列间距都不同。
我的输出应该是这样的:
|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
数据框中。
我需要帮助解决这个问题:
我有一个充满 .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"]
)。
但现在我 运行 陷入两个问题:
如何读取不同的文件并将它们全部附加到单个 DataFrame,以及如何从所述文件中的所有行中创建一个列
如何解析这些文件,因为几乎所有文件的列间距都不同。
我的输出应该是这样的:
|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
数据框中。