任何人都成功尝试将多个ARFF文件从Windows命令行转换为CSV文件。
我尝试使用weka.core.converters.CSVSaver
,但它仅适用于单个文件。
可以为多个文件完成吗?
答案 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)