Excel比较两个csv文件并显示差异

如何解决Excel比较两个csv文件并显示差异

| 我正在寻找比较两组大型csv文件和/或csv文件和.txt文件的工具。我“认为” .txt文件可能只是出于简单起见需要转换为csv文件,但这可能需要也可能不需要。我想使用excel,c ++或python。我需要将一个“接受的”值列表与要测量的列表进行比较,如果有一个,则找出它们之间的差异。 Excel可能是执行此操作的最简单方法,但python或c ++可能也一样。这不是家庭作业,所以不必担心这种事情。代码建议和/或模板非常感谢。或网站链接 编辑1 我已经阅读了有关Python的difflib或different类的信息,但是不熟悉如何使用它,可能超出了我的期望。 编辑2 这两个文件都有一系列的列(在它们之间或任何东西之间都没有画线),在那些“命名的”列的下方将有数字。我需要比较文件1的第1列中的编号与文件2的第1列中的编号,如果存在差异,请在另一个csv文件中显示差异     

解决方法

        您可以使用ADO(ODBC / JET / OLEDB文本驱动程序)从每种启用COM的语言将\'decent \'.txt / .csv / .tab / .flr文件视为SQL数据库中的表。然后可以使用SQL(DISTINCT,GROUP,(左)JOINS,...)的功能进行比较。 添加关于您的评论: 这是您的问题,我不想把您推到您不想去的地方。但是,如果需要比较表格数据,SQL是一个很好的工具(最好?)。作为证据的脚本的输出可以发现两个.txt文件之间的差异:
======= The .txt files to play with
------- file1.txt
\"AC\";\"AM\"
40000;-19083,00
40100;20000,00
40200;350004,00
40300;3498,99

------- file2.txt
\"AC\";\"AM\"
40000;-19083,99
40105;-234567,00
40200;350,00

======= Some diagnostic SQL
------- <NULL> indicates: In F1 but not in F2 (LEFT JOIN)
SELECT T1.AC,T1.AM,T2.AM FROM [file1.txt] AS T1 LEFT JOIN [file2.txt] AS T2 ON (T1.AC =
T2.AC)
------- Result
AC      File1   File2
40000   -19083  -19083
40100   20000   <NULL>
40200   350004  350
40300   3498,99 3498,99

------- <NULL> indicates: Not in the other file (LEFT JOIN,UNION)
SELECT T1.AC,T2.AM FROM [file1.txt] AS T1 LEFT JOIN [file2.txt] AS T2 ON (T1.AC =
T2.AC) UNION SELECT T2.AC,T2.AM FROM [file2.txt] AS T2 LEFT JOIN [file1.txt] AS T1
 ON (T1.AC = T2.AC)
------- Result
AC      File1   File2
40000   -19083  -19083
40100   20000   <NULL>
40105   <NULL>  -234567
40200   350004  350
40300   3498,99

------- the problems: missing,different values
SELECT T1.AC,T2.AM FROM [file1.txt] AS T1 LEFT JOIN [file2.txt] AS T2 ON (T1.AC =
T2.AC) WHERE T2.AM IS NULL OR T1.AM <> T2.AM UNION SELECT T2.AC,T2.AM FROM [file2.
txt] AS T2 LEFT JOIN [file1.txt] AS T1 ON (T1.AC = T2.AC) WHERE T1.AM IS NULL OR T1.AM <>
T2.AM
------- Result
AC      File1   File2
40100   20000   <NULL>
40105   <NULL>  -234567
40200   350004  350
进一步的补充: 本文讨论ADO和文本文件;寻找一个文件adoNNN.chm (NNN =版本号,例如210);这是一本关于 ADO。 您可以使用Access或OpenOffice Base来试验SQL语句 应用于链接/引用(未导入!)文本数据库。 掌握了最初的障碍之后,脚本/程序将很容易:连接 到数据库,即到包含文件和schema.ini的文件夹 文件来定义文件=表的结构。 上面的输出是由以下生成的:
  Const adClipString = 2

  Dim oFS  : Set oFS = CreateObject( \"Scripting.FileSystemObject\" )
  Dim sDir : sDir    = oFS.GetAbsolutePathName( \".\\txt\" )
  Dim oDB  : Set oDb = CreateObject( \"ADODB.Connection\" )
  oDB.Open \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\" & sDir & \";Extended Properties=\"\"text\"\"\"
  Dim sSQL
  Dim sFiNa
  WScript.Echo \"=======\",\"The .txt files to play with\"
  For Each sFiNa In Array( \"file1.txt\",\"file2.txt\"  )
      WScript.Echo \"-------\",sFiNa
      WScript.Echo oFS.OpenTextFile( \"txt\\\" & sFiNa ).ReadAll()
  Next

  WScript.Echo \"=======\",\"Some diagnostic SQL\"
  Dim aSQL
  For Each aSQL In Array( _
       Array(   \"<NULL> indicates: In F1 but not in F2 (LEFT JOIN)\" _,Join( Array( _
                     \"SELECT T1.AC,T2.AM FROM\" _,\"[file1.txt] AS T1\" _,\"LEFT JOIN [file2.txt] AS T2 ON (T1.AC = T2.AC)\" _
                ),\" \" ) ) _,Array(   \"<NULL> indicates: Not in the other file (LEFT JOIN,UNION)\" _,\"LEFT JOIN [file2.txt] AS T2 ON (T1.AC = T2.AC)\" _,\"UNION\" _,\"SELECT T2.AC,\"[file2.txt] AS T2\" _,\"LEFT JOIN [file1.txt] AS T1 ON (T1.AC = T2.AC)\" _
                ),Array(   \"the problems: missing,different value\" _,\"WHERE T2.AM IS NULL OR T1.AM <> T2.AM\" _,\"LEFT JOIN [file1.txt] AS T1 ON (T1.AC = T2.AC)\" _,\"WHERE T1.AM IS NULL OR T1.AM <> T2.AM\" _
                ),\" \" ) ) _
     )
     sSQL = aSQL( 1 )
     WScript.Echo \"-------\",aSQL( 0 )
     WScript.Echo sSQL
     Dim oRS : Set oRS = oDB.Execute( sSQL )
     WScript.Echo \"------- Result\"
     WScript.Echo Join( Array( \"AC\",\"File1\",\"File2\" ),vbTab )
     WScript.Echo oRS.GetString( adClipString,vbTab,vbCrLf,\"<NULL>\" )
  Next
  oDB.Close
如果删除/忽略胖(创建SQL语句,诊断输出),它将沸腾 下降到6行
  Dim oDB  : Set oDb = CreateObject( \"ADODB.Connection\" )
  oDB.Open \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\" & sDir & \";Extended Properties=\"\"text\"\"\"
  sSQL = \"...\"
  Dim oRS : Set oRS = oDB.Execute( sSQL )
  WScript.Echo oRS.GetString( adClipString,\"<NULL>\" )
  oDB.Close
可以轻松地“移植”到每种启用COM的语言,因为ADO 物体完成所有繁重的工作。当您使用.GetString方法时, 要保存结果集:只需旋转一下分隔符/分隔符/空参数 并转储到文件
  oFS.CreateTextFile( ... ).WriteLine oRS.GetString( _
    adClipString,\",\"\"
  )
(不要忘记为该表添加一个定义到您的schema.ini中)。的  当然,您也可以使用\“ SELECT / INSERT INTO \”,但是这样的语句可能不会  很容易正确/通过ADO Text Driver的解析器。 加法运算: 从5 x 2主文件/批准文件开始,其中包含:
Num0    Num1    Num2    Num3    Num4
7,6     6,1     3,8     0,9     8,9
0,9     9,4     4,7     8,8     9,9
将其转换为Expected.txt
Num0    Num1    Num2    Num3    Num4    Spot
7,9     1
0,9     2
通过附加Spot列,使其符合
[expected.txt]
ColNameHeader=True
CharacterSet=1252
Format=Delimited(;)
Col1=Num0 Float
Col2=Num1 Float
Col3=Num2 Float
Col4=Num3 Float
Col5=Num4 Float
Col6=Spot Integer
在您的schema.ini文件中。同样,转换一个度量文件,例如:
Num0    Num1    Num2    Num3    Num4
7,1     1,9
到measured.txt
Num0    Num1    Num2    Num3    Num4    Spot
7,9     2
应用
  sSQL = Join( Array( _
         \"SELECT E.Num0 - M.Num0 AS Dif0\" _,E.Num1 - M.Num1 AS Dif1\" _,E.Num2 - M.Num2 AS Dif2\" _,E.Num3 - M.Num3 AS Dif3\" _,E.Num4 - M.Num4 AS Dif4\" _,E.Spot          AS Spot\" _,\"FROM [expected.txt] AS E\" _,\"INNER JOIN [measured.txt] AS M\" _,\"ON E.Spot = M.Spot\" _
  ),\" \" )
将结果集写入difference.txt aFNames = Array(\“ Num0 \”,... \“ Spot \”)   oFS.CreateTextFile(sFSpec)。写_     Join(aFNames,sFSep)&sRSep&oRS.GetString(adClipString,,sFSep,sRSep,\“ \”) 你会得到:
Num0    Num1    Num2    Num3    Num4    Spot
0,5     5       0       0       0       1
0       0       0       0       0       2
    ,        您无需编写代码,可以使用文本编辑器中的replace函数在两个文件(空格或逗号)中使分隔符相同,并使用TortoiseSVN的图形化diff工具对其进行比较:http://tortoisesvn.net/     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-