读取样本下的基本行为文件并将其处理成LibSVM需要的格式

SVM是一种很强大的的机器学习分类算法,在很多诸如文本分类,图像分类,生物序列分析和生物数据挖掘,手写字符识别等领域有很多的应用。具体理论性的东西参考博文http://www.dataguru.cn/forum.php?mod=viewthread&tid=371987 看完还是似懂非懂。

最近在做SVM分类,处理对象是恶意程序动态分析生成的基本行为文件,它是1*811的0、1串,libsvm需要的格式是label index:value,刚开始想采用python实现,由于其文件操作没有很强大,勿喷可能是我对python不熟。最后用C++实现了,期间也出现了一些问题,最后搞定了。

下面把代码贴出来:

首先是用python实现的从样本分析结果中找出基本行为文件,由于基本行为文件都是带有result_txt后缀的,代码如下:

#! /usr/bin/python
import os
import shutil

#抽取样本运行结果中的基本业务特征
dpath = r"C:\Users\xd\Desktop\1.12\360\test0"
rpath = r"C:\Users\xd\Desktop\1.12\360\test"

filenames = os.listdir(dpath)
for filename in filenames:
    filepath=dpath+"/"+filename
    if os.path.isdir(dpath):
        names=os.listdir(filepath)
        for name in names:
            if (name == filename + "_"+"result.txt"):
                fpath = filepath + "/" + name
                shutil.copy(fpath,rpath)

C++实现对文件夹下的基本行为文件进行文件格式转换的代码:

#include <iostream>
#include <iomanip>
#include <fstream>
#include <io.h>
#include <vector>
#include <string>
using namespace std;

void getFiles( string path, vector<string>& files );
void main()
{
    int a[812];
    ifstream f;
    a[0]=1;
    char s;
    //char *ss;
    char * filepath="C:\\Users\\xd\\Desktop\\1.12\\360\\test";
    vector<string> files;
    getFiles(filepath,files);
    int size = files.size();  

    ofstream f1;
    f1.open("e:\\test.txt");

    for (int i = 0;i < size;i++)
    {
        cout<<files[i].c_str()<<endl;
        //ss=files[i].c_str();
        f.open(files[i].c_str());
        for (int n=1;n<=811;n++)
        {
            s=f.get();
            a[n]=s-‘0‘;
        }
        f.close();

        f1<<a[0]<<" ";
        for(int j=1;j<=811;j++)
        {
            f1<<j<<":"<<a[j]<<" ";
        }
        f1<<endl;

    }
    f1.close();
}
void getFiles( string path, vector<string>& files )
{
    long   hFile   =   0;
    struct _finddata_t fileinfo;
    string p;
    if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)
    {
        do
        {
            if((fileinfo.attrib &  _A_SUBDIR))
            {
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
                    getFiles( p.assign(path).append("\\").append(fileinfo.name), files );
            }
            else
            {
                files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
            }
        }while(_findnext(hFile, &fileinfo)  == 0);
        _findclose(hFile);
    }
}
时间: 2024-08-03 08:51:30

读取样本下的基本行为文件并将其处理成LibSVM需要的格式的相关文章

使用ResourceBundle 类读取 src 下的 xxx.properties 文件

之前要读取 src 下的 .properties 文件都是使用的类加载器,加载类路径下的资源文件当做一个流来处理,load 到一个 Properties 对象上. jdbc.properties 代码如下: #驱动 driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test user=root password=root java代码如下: public class Test { public static void mai

C# 读取文件目录下的所有的文件

DirectoryInfo 类 公开用于创建.移动和枚举目录和子目录的实例方法.无法继承此类. Directory 类 公开用于创建.移动和枚举通过目录和子目录的静态方法.无法继承此类 一般使用directoryInfo类比较多 DirectoryInfo dInfo = new DirectoryInfo(“绝对路径”);//实例化一个DirectoryInfo的对象//int index = 0; foreach (FileInfo fInfo in dInfo.GetFiles())// 

Java读取利用java.util类Properties读取resource下的properties属性文件

说明:upload.properties属性文件在resources下 import java.io.IOException;import java.io.InputStream;import java.util.Properties;import java.util.ResourceBundle; public class Test { private static Properties pro ; static{ InputStream inputStream = Test.class.ge

解决:java 读取 resources 下面的 json 文件

前言:java 读取 工程下的配置文件,文件类型为 json(*.json),记录一下始终读取不到 json 文件的坑.maven项目 直接上工具类代码 package com.yule.component.dbcomponent.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; import java.io.*; /** *

Pandas 读取超过 65536 行的 Excel 文件

Excel 文件的格式曾经发生过一次变化,在 Excel 2007 以前,使用扩展名为 .xls 格式的文件,这种文件格式是一种特定的二进制格式,最多支持 65,536 行,256 列表格.从 Excel 2007 版开始,默认采用了基于 XML 的新的文件格式 .xlsx ,支持的表格行数达到了 1,048,576,列数达到了 16,384.需要注意的是,将 .xlsx 格式的文件转换为 .xls 格式的文件时,65536 行和 256 列之后的数据都会被丢弃. Pandas 读取 Excel

Spring 读取classpath下的文件存到map里面

Spring配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework

VBA读取可选择文件夹下可选择txt文件内容

Sub OneTxt() '打开一个txt文件 Dim Filename As Variant, extLine&, mArr() As String Dim i%, j% ChDir ThisWorkbook.Path Filename = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "请选取档案", , MultiSelect:=True) j = 1 For k = 1 To U

Spring读取mybatis在多个jar包下的的mapper文件

 刚开始的时候我的配置文件在同名目录下都是在/mapper下,导致只能读取一个jar中的mapper文件.先解决如下: 1.将mapper文件放在不能放在同名的目录下.        比如:user.jar放在/user下,common.jar放在common下 2.在Spring中配置  (记住:classpath后跟*号) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactory

读取ClassPath下resource文件的正确姿势

1.前言 为什么要写这篇文章?身为Java程序员你有没有过每次需要读取 ClassPath 下的资源文件的时候,都要去百度一下,然后看到下面的这种答案: Thread.currentThread().getContextClassLoader().getResource("ss.properties").getPath(); 亦或是: Object.class.getResourceAsStream("ss.properties"): 你复制粘贴一下然后放到自己的项