difflib python格式化

Try*_*ard 2 python csv

我正在使用此代码来查找两个csv列表之间的差异,并提出一些格式问题.这可能是一个简单的修复,但我是新的,并试图学习和有很多问题.

 import difflib

 diff=difflib.ndiff(open('test1.csv',"rb").readlines(), open('test2.csv',"rb").readlines()) 

 try:
  while 1:
    print diff.next(),
except:
 pass
Run Code Online (Sandbox Code Playgroud)

代码工作正常,我得到我正在寻找的输出:

 Group,Symbol,Total

 - Adam,apple,3850

 ?           ^
 + Adam,apple,2850

 ?           ^
 bob,orange,-45

 bob,lemon,66

 bob,appl,-56

 bob,,88
Run Code Online (Sandbox Code Playgroud)

我的问题是如何清理格式化,我可以将Group,Symbol,Total编入sperate列,并将下面的文本排成一行吗?

我也可以改变吗?代表我确定的文字?例如测试1和测试2表示它来自哪个表?

谢谢你的帮助

Rol*_*ith 5

使用difflib.unified_diff提供更清洁的输出,见下文.

此外,双方difflib.ndiffdifflib.unified_diff返回一个迥异对象,它是一个生成的对象,你可以在直接使用for循环,而且知道什么时候退出,这样你就不必自己处理异常.NB; 后面的逗号line是为了防止print添加另一个换行符.

import difflib
s1 = ['Adam,apple,3850\n', 'bob,orange,-45\n', 'bob,lemon,66\n', 
      'bob,appl,-56\n', 'bob,,88\n']
s2 = ['Adam,apple,2850\n', 'bob,orange,-45\n', 'bob,lemon,66\n', 
      'bob,appl,-56\n', 'bob,,88\n']

for line in difflib.unified_diff(s1, s2, fromfile='test1.csv',
                 tofile='test2.csv'): 
    print line,
Run Code Online (Sandbox Code Playgroud)

这给出了:

--- test1.csv
+++ test2.csv
@@ -1,4 +1,4 @@
-Adam,apple,3850
+Adam,apple,2850
 bob,orange,-45
 bob,lemon,66
 bob,appl,-56
Run Code Online (Sandbox Code Playgroud)

所以,你可以清楚地看到哪些行之间的变化test1.csvtest1.csv.