当前位置: 首页 > 知识库问答 >
问题:

如何比较两个不同大小的Csv文件之间的值?

朱和惬
2023-03-14

我想知道循环浏览两个csv文件并比较它们的列最合适的方式是什么。具体来说,我想将csv文件1第1列与csv文件2第20列的每一次迭代进行比较,并检查是否存在匹配。以下是我到目前为止的情况。此外,csv文件1比csv文件2小得多。

public class ClassifyData {

public static void main(String[]args) throws IOException{

File file1 = new File("file1.csv");

File file2 = new File("file2.csv");
FileWriter writer = new FileWriter("/Users/home/Work.csv");
PrintWriter pw = new PrintWriter(writer);
Scanner in = new Scanner(file1);
Scanner in2 = new Scanner(file2);
boolean firstLine = true;
String[] temp = null;
String [] temp2 = null;
String line = null;
String line2 = null;

while((line = in.nextLine())!=null){

    temp= line.split(",");  
while(line2 = in2.nextLine() !=null){
    temp2 = line2.split(",");


    if(temp[0] == temp[20]){
        System.out.println("match");
        pw.append("0");
        continue;

    }




    pw.append("\n");

    }
}

pw.flush();
pw.close();
writer.close();

}

    }

共有2个答案

岳嘉悦
2023-03-14

我认为你的解决方案行不通,因为你只需要浏览两个文件一次(你同时按顺序递增浏览两个文件)。鉴于第一个文件很小,我建议彻底检查该文件一次,并将值存储在哈希表的第一列中。然后循环浏览第二个文件,检查第20列中的值是否出现在哈希表中。

谭修然
2023-03-14

if(temp[0]==temp[20])行中,你可能是指if(temp[0]]=temp2[20])。这会给你想要的比较。然而,您是内部的,而循环仍然不会像您希望的那样在第二个文件的开头重新开始。我不认为扫描器对象可以在一个文件上重新开始,即使可以,反复读取同一个文件也会浪费大量的文件读取。这样对您的磁盘更有效率:

ArrayList<String> list1 = new ArrayList<String>;
while((line = in.nextLine())!=null){
    temp= line.split(",");  
    list1.add(temp[0]);
}
// ...
for(int i = 0; i < list1.size(); i++){
    for(int j = 0; j < list2.size(); j++){
        if(list1.get(i).equals(list2.get(j))){
            System.out.println("Match found");
        }
    }
}

警告:未经测试的代码

 类似资料:
  • 我想比较这两个函数的值。不幸的是,我试图使,但我一直得到。 我想检查如果。这就是我上面完整的代码。

  • 我试图建立一个函数,检查一个单词或文本是否是回文。要做到这一点,它拆分文本,使每个字母都是一个新数组的元素,它去掉空白,并建立反向数组。然后检查两个数组中处于相同位置的每个元素是否相等。如果不是,则返回false,如果是,则返回true。这里的函数是: 我不知道出了什么问题,但是不管我传递给函数什么单词或文本,函数似乎都在返回一个真值。那有什么不好?

  • 我需要逐行比较两个文件。在每个文件中,行只有1或-1,所以如果行相同,就不要计数,如果行不同,就计数=+1。 例如:

  • 我想比较两个音频文件,例如mp3和wav。我用Musicg通过指纹进行比较。 musicg只在wav上工作,所以我使用JAVE将mp3转换为wav 现在的问题是,当我尝试比较两个我不转换指纹的wav时,工作完美,但是当我比较两个不同的音频时,我必须转换它总是返回两个音频是相同的。

  • 我有一个df,我试图比较两个列,如果它们在同一行中有大约相同的值,我希望它从df中删除。即。: 我只希望df中保留第2/3行,因为第1/4行中的A和B彼此相似。 我曾经尝试过这样做,如果A列中的在某个范围内(/-15%的行B的值),则删除该行,但没有成功。我不知道熊猫是否有某种内在的功能。