2015-09-09 4 views
0

Я пытаюсь сравнить файлы CSV с основным CSV-файлом и приложить к нему главный файл с любыми изменениями. Когда я запускаю программу, я получаю неожиданные результаты.Python ndiff неверный результат

Python код:

import glob 
import difflib 

final = "Z:\\_data\\master.csv" 
folder = "Z:\\_data\\" 

for file in glob.glob(folder + "*sample*.csv"): 
    #print file 
    diff = difflib.ndiff(open(final).readlines(),open(file).readlines()) 
    delta1 = ''.join(x[2:] for x in diff if x.startswith('+ ')) 
    #print delta1 

    if delta1 != "": 
     with open(final, 'ab') as new_file: 
      new_file.write("\n" + delta1) 

sample1.csv

id,tech,type,work_date 
C-40,,, 
C-33,,, 
C-32,,, 

sample2.csv

id,tech,type,work_date 
W-37,ty,Waterous,8-12-15 
W-38,ty,Dresser,8-12-15 
W-5,ty,Waterous,9-1-15 
C-44,tf,Waterous,xx 
P-40,,, 

master.csv

id,tech,type,work_date 

Когда я запустить программу в первый раз, мастер-файл выглядит следующим образом:

id,tech,type,work_date 
id,tech,type,work_date 
C-40,,, 
C-33,,, 
C-32,,, 
W-37,ty,Waterous,8-12-15 
W-38,ty,Dresser,8-12-15 
W-5,ty,Waterous,9-1-15 
C-44,tf,Waterous,xx 
P-40,,, 

Когда я запускаю программу несколько раз я получаю следующее:

id,tech,type,work_date 
id,tech,type,work_date 
C-40,,, 
C-33,,, 
C-32,,, 
W-37,ty,Waterous,8-12-15 
W-38,ty,Dresser,8-12-15 
W-5,ty,Waterous,9-1-15 
C-44,tf,Waterous,xx 
P-40,,, 
C-32,,, 
P-40,,, 

Как вы можете видеть выше результат имеет повторяющиеся строки.

Я ожидал, что результат будет

id,tech,type,work_date 
C-40,,, 
C-33,,, 
C-32,,, 
W-37,ty,Waterous,8-12-15 
W-38,ty,Dresser,8-12-15 
W-5,ty,Waterous,9-1-15 
C-44,tf,Waterous,xx 
P-40,,, 
+0

И что вы ожидали ...? –

ответ

0

Я думаю, ваша проблема может быть потому, что в последней строке

new_file.write("\n" + delta1) 

Попробуйте удалить "\ п", как раз только

new_file.write(delta1) 

Я пробовал свой код в Linux. Он создал дополнительную пустую строку

id,tech,type,work_date 

C-40,,, 
C-33,,, 
C-32,,, 

W-37,ty,Waterous,8-12-15 
W-38,ty,Dresser,8-12-15 
W-5,ty,Waterous,9-1-15 
C-44,tf,Waterous,xx 
P-40,,, 

На машине с Windows это может вести себя по-другому. Вероятно, это имеет значение. таких, как вы сравните

id,tech,type,work_date 

с ид, технологии, тип, work_date \ п

На окнах вы, вероятно, не видите дополнительные пустые строки, так как окна использовать \ г \ п для новой линии.

Смежные вопросы