对比两个CSV 文件是否相同(方法一)

这是一个Java实现的工具类,用于比较两个CSV文件的内容是否相同。它读取CSV文件,通过正则表达式处理特殊字符,并进行逐行逐元素的比较。如果文件大小不同或内容不一致,将输出相应的提示。
摘要由CSDN通过智能技术生成
package shishikan;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CsvFileUtil
{
    private static final String SPECIAL_CHAR_A = "[^\",\\n  ]";
    private static final String SPECIAL_CHAR_B = "[^\",\\n]";
    /**
     * 构造,禁止实例化
     */
    private CsvFileUtil()
    {
    }
    public static void main(String[] args)
    {
        // test
        try
        {
            List list1 = readCsvFile("e:\\1234.csv");
            List list2 = readCsvFile("e:\\12345.csv");
            
            if(cvsCompare(list1, list2))  System.out.print("csv比较相同");
            else System.out.print("csv比较不相同");
            
        } catch (FileNotFoundException ex)
        {
            Logger.getLogger(CsvFileUtil.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex)
        {
            Logger.getLogger(CsvFileUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    
    public static <T extends Comparable<T>> boolean compare(List<T> a, List<T> b)
    {
        if (a.size() != b.size())
            return false;
        Collections.sort(a);
        Collections.sort(b);
        for (int i = 0; i < a.size(); i++)
        {
            if (!a.get(i).equals(b.get(i)))
                return false;
        }
        return true;
    }
    

    /**
     * csv文件读取<BR/> 读取绝对路径为argPath的csv文件数据,并以List返回。
     *
     * @param argPath
     *            csv文件绝对路径
     * @return csv文件数
当你想比较两个CSV(Comma Separated Values)文件时,你需要确保它们有相同的列结构和数据类型。CSV文件通常包含表格数据,每行代表一条记录,每列代表一个字段,用逗号或其他分隔符分隔。 以下是一些关键点来对比两个CSV文件: 1. **列数和顺序**:检查两份文件是否相同数量的列,以及列的排列顺序是否一致。如果不一致,可能需要根据文件的元数据或文档描述来确定正确的列对应关系。 2. **列名**:每个文件的第一行通常列出了列标题,如果这两个文件列标题不同或缺少,则说明列映射有问题。 3. **数据类型**:对于数值型、日期/时间、文本等类型的数据,确认列中的值是否匹配预定义的数据类型。 4. **缺失值处理**:查看是否存在空值(如“,”、“NA”、“NaN”等),并确认两份文件对缺失值的处理方式(例如使用特定符号表示,还是视为丢失数据是否一致。 5. **重复值**:检查是否有些行在两份文件中都出现,可能存在数据合并或导入错误。 6. **非数值数据**:字符串、特殊字符或其他非数字信息也需要进行比对,确保没有意外的变化。 7. **大小写和编码**:虽然CSV默认是不区分大小写的,但某些情况下可能会有差异,比如字段名或特定值。 要编写一个脚本进行详细的比较,你可以使用Python的pandas库,它提供了强大的数据处理和比较功能。以下是一个简单的示例,展示了如何读取和比较两个CSV文件: ```python import pandas as pd # 读取文件 file1 = pd.read_csv('file1.csv') file2 = pd.read_csv('file2.csv') # 检查列数 if file1.shape[1] != file2.shape[1]: print("文件1和文件2的列数不同") # 检查列标题是否一致 if list(file1.columns) != list(file2.columns): print("列标题不匹配") # 对照每一列的内容 for col in file1.columns: if not file1[col].equals(file2[col]): print(f"列'{col}'的内容不一致") ``` 执行这段代码后,会显示出哪些列不一致,或者列数、列标题的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值