ARFF到CSV多个文件转换

时间:2016-09-01 18:19:19

标签: weka

任何人都成功尝试将多个ARFF文件从Windows命令行转换为CSV文件。

我尝试使用weka.core.converters.CSVSaver,但它仅适用于单个文件。

可以为多个文件完成吗?

3 个答案:

答案 0 :(得分:4)

我找到了一种通过使用R解决此转换的方法,如下面的脚本所示:

#### Set the default directory to the folder that contains all ARFF files 

temp = list.files(pattern="*.arff")
library(foreign)

for (i in 1:length(temp)) assign(temp[i], read.arff(temp[i]))

for(i in 1:length(temp))
{
mydata=read.arff(temp[i])
t=temp[i]
x=paste(t,".csv")
write.csv(mydata,x,row.names=FALSE)
mydata=0
}

答案 1 :(得分:0)

在Windows命令行中,键入powershell

切换到* .arff文件所在的目录

输入此命令

dir *.arff | Split-Path -Leaf| ForEach-Object {Invoke-Expression "C:\Program Files\Weka-3-6\weka.jar;." weka.core.converters.CSVSaver -i $_ -o $_.csv"}

这假定您的文件名不包含任何空格,并且所有arff文件都驻留在单个目录中,并且您希望将它们全部转换。它将从每个arff文件创建一个新的csv文件。 myfile.arff将导出/转换为myfile.arff.csv

答案 2 :(得分:0)

我在github: arff2csv.py中编写了一个简单的python脚本。

粘贴我的代码。

"""trans multi-label *.arff file to *.csv file."""
import re


def trans_arff2csv(file_in, file_out):
    """trans *.arff file to *.csv file."""
    columns = []
    data = []
    with open(file_in, 'r') as f:
        data_flag = 0
        for line in f:
            if line[:2] == '@a':
                # find indices
                indices = [i for i, x in enumerate(line) if x == ' ']
                columns.append(re.sub(r'^[\'\"]|[\'\"]$|\\+', '', line[indices[0] + 1:indices[-1]]))
            elif line[:2] == '@d':
                data_flag = 1
            elif data_flag == 1:
                data.append(line)

    content = ','.join(columns) + '\n' + ''.join(data)

    # save to file
    with open(file_out, 'w') as f:
        f.write(content)


if __name__ == '__main__':
    from multi_label.arff2csv import trans_arff2csv

    # setting arff file path
    file_attr_in = r'D:\Downloads\birds\birds-test.arff'
    # setting output csv file path
    file_csv_out = r"D:\Downloads\birds\birds-test.csv"
    # trans
    trans_arff2csv(file_attr_in, file_csv_out)