python text difflib

python difflib comparando archivos



diff python sympy (2)

Estoy tratando de usar difflib para producir diff para dos archivos de texto que contienen tweets. Aquí está el código:

#!/usr/bin/env python # difflib_test import difflib file1 = open(''/home/saad/Code/test/new_tweets'', ''r'') file2 = open(''/home/saad/PTITVProgs'', ''r'') diff = difflib.context_diff(file1.readlines(), file2.readlines()) delta = ''''.join(diff) print delta

Aquí está el archivo de texto PTITVProgs :

Watch PTI on April 6th (7) Dr Israr Shah at 10PM on Business Plus in "Talking Policy". Rgds #PTI CORRECTION!! Watch PTI on April 6th (5) @Asad_Umar at 8PM on ARY News. Rgds #PTI Watch PTI on April 6th (5) @Asad_Umar at 8PM on AAJ News (6) PTI vs PMLN at 8PM on NewsOne. Rgds #PTI Watch PTI on April 6th (5) Asad Umar at 8PM on AAJ News (6) PTI vs PMLN at 8PM on NewsOne. Rgds #PTI Watch PTI on April 6th (5) Waleed Iqbal at 8PM on Channel 5. Rgds #PTI Watch PTI on April 6th (3) Dr Israr Shah at 10PM on PTV News. Rgds #PTI Watch PTI on April 6th (4) Javed hashmi at 1PM on PTV News. Rgds #PTI Watch PTI on April 6th (3) Imran Alvi at 1PM on AAJ News. Rgds #PTI Watch PTI on April 6th (1) Dr @ArifAlvi, Andleeb Abbas and Ehtisham Ameer at 11PM on ARY News (2) Hamid Khan at 10PM on ATV. Rgds #PTI Watch PTI on April 5th (1) Farooq Amjad Meer at 10:45PM on Dunya News. Rgds #PTI Watch PTI on April 4th (4) Faisal Khan at 8PM on PTV News. Rgds #PTI @FaisalJavedKhan Watch PTI on April 4th (3) Faisal Khan at 11PM on ATV. Rgds #PTI @FaisalJavedKhan Watch PTI on April 4th (1) Dr Israr Shah at 8PM on Waqt News (2) Dr Arif Alvi at 9PM on PTV World. Rgds #PTI @ArifAlvi Watch PTI on April 3rd (12) Abrar ul Haq on 10PM on Dawn News (13) Shabbir Sial at 10PM on Channel5. Rgds #PTI Watch PTI on April 3rd (11) Sadaqat Abbasi on 8PM on RohiTV. Rgds #PTI Watch PTI on April 3rd (10) Dr Zarqa and Andleeb Abbas on 8PM on Waqt News. Rgds #PTI Watch PTI on April 3rd (9) Fauzia Kasuri at 8PM on Din News. Rgds #PTI Watch PTI on April 3rd (8) Mehmood Rasheed at 8PM on ARY News. Rgds #PTI Watch PTI on April 3rd (7) Israr Abbasi (Repeat on Arp 4th) at 1:20AM and 1PM on Vibe TV. Rgds #PTI Watch PTI on April 3rd (5) Rao Fahad at 9PM on Express News (6) Dr Seems Zia at 10:30PM on Health TV. Rgds #PTI

Aquí está el archivo de texto new_tweets :

Watch PTI on April 7th (3) Malaika Reza at 8PM on AAJ News (4) Shah Mehmood Qureshi at 8PM on Geo News. Rgds #PTI Watch PTI on April 7th (2) Chairman IMRAN KHAN at 10PM on PTV News in News Night with Sadia Afzal, Rpt: 2AM, 2PM. Rgds #PTI @ImranKhanPTI Watch PTI on April 7th (1) Dr Waseem Shahzad NOW at 6PM on PTV News. Rgds #PTI Watch PTI on April 6th (7) Dr Israr Shah at 10PM on Business Plus in "Talking Policy". Rgds #PTI CORRECTION!! Watch PTI on April 6th (5) @Asad_Umar at 8PM on ARY News. Rgds #PTI Watch PTI on April 6th (5) @Asad_Umar at 8PM on AAJ News (6) PTI vs PMLN at 8PM on NewsOne. Rgds #PTI Watch PTI on April 6th (5) Asad Umar at 8PM on AAJ News (6) PTI vs PMLN at 8PM on NewsOne. Rgds #PTI Watch PTI on April 6th (5) Waleed Iqbal at 8PM on Channel 5. Rgds #PTI Watch PTI on April 6th (3) Dr Israr Shah at 10PM on PTV News. Rgds #PTI Watch PTI on April 6th (4) Javed hashmi at 1PM on PTV News. Rgds #PTI Watch PTI on April 6th (3) Imran Alvi at 1PM on AAJ News. Rgds #PTI Watch PTI on April 6th (1) Dr @ArifAlvi, Andleeb Abbas and Ehtisham Ameer at 11PM on ARY News (2) Hamid Khan at 10PM on ATV. Rgds #PTI Watch PTI on April 5th (1) Farooq Amjad Meer at 10:45PM on Dunya News. Rgds #PTI Watch PTI on April 4th (4) Faisal Khan at 8PM on PTV News. Rgds #PTI @FaisalJavedKhan Watch PTI on April 4th (3) Faisal Khan at 11PM on ATV. Rgds #PTI @FaisalJavedKhan Watch PTI on April 4th (1) Dr Israr Shah at 8PM on Waqt News (2) Dr Arif Alvi at 9PM on PTV World. Rgds #PTI @ArifAlvi Watch PTI on April 3rd (12) Abrar ul Haq on 10PM on Dawn News (13) Shabbir Sial at 10PM on Channel5. Rgds #PTI Watch PTI on April 3rd (11) Sadaqat Abbasi on 8PM on RohiTV. Rgds #PTI Watch PTI on April 3rd (10) Dr Zarqa and Andleeb Abbas on 8PM on Waqt News. Rgds #PTI Watch PTI on April 3rd (9) Fauzia Kasuri at 8PM on Din News. Rgds #PTI

Aquí está la diferencia que obtengo del programa:

*** --- *************** *** 1,7 **** - Watch PTI on April 7th (3) Malaika Reza at 8PM on AAJ News (4) Shah Mehmood Qureshi at 8PM on Geo News. Rgds #PTI - Watch PTI on April 7th (2) Chairman IMRAN KHAN at 10PM on PTV News in News Night with Sadia Afzal, Rpt: 2AM, 2PM. Rgds #PTI - @ImranKhanPTI - Watch PTI on April 7th (1) Dr Waseem Shahzad NOW at 6PM on PTV News. Rgds #PTI Watch PTI on April 6th (7) Dr Israr Shah at 10PM on Business Plus in "Talking Policy". Rgds #PTI CORRECTION!! Watch PTI on April 6th (5) @Asad_Umar at 8PM on ARY News. Rgds #PTI Watch PTI on April 6th (5) @Asad_Umar at 8PM on AAJ News (6) PTI vs PMLN at 8PM on NewsOne. Rgds #PTI --- 1,3 ---- *************** *** 21,24 **** Watch PTI on April 3rd (12) Abrar ul Haq on 10PM on Dawn News (13) Shabbir Sial at 10PM on Channel5. Rgds #PTI Watch PTI on April 3rd (11) Sadaqat Abbasi on 8PM on RohiTV. Rgds #PTI Watch PTI on April 3rd (10) Dr Zarqa and Andleeb Abbas on 8PM on Waqt News. Rgds #PTI ! Watch PTI on April 3rd (9) Fauzia Kasuri at 8PM on Din News. Rgds #PTI--- 17,23 ---- Watch PTI on April 3rd (12) Abrar ul Haq on 10PM on Dawn News (13) Shabbir Sial at 10PM on Channel5. Rgds #PTI Watch PTI on April 3rd (11) Sadaqat Abbasi on 8PM on RohiTV. Rgds #PTI Watch PTI on April 3rd (10) Dr Zarqa and Andleeb Abbas on 8PM on Waqt News. Rgds #PTI ! Watch PTI on April 3rd (9) Fauzia Kasuri at 8PM on Din News. Rgds #PTI ! Watch PTI on April 3rd (8) Mehmood Rasheed at 8PM on ARY News. Rgds #PTI ! Watch PTI on April 3rd (7) Israr Abbasi (Repeat on Arp 4th) at 1:20AM and 1PM on Vibe TV. Rgds #PTI ! Watch PTI on April 3rd (5) Rao Fahad at 9PM on Express News (6) Dr Seems Zia at 10:30PM on Health TV. Rgds #PTI

Como puede ver al comparar rápidamente los dos archivos de origen (PTITVProgs y new_tweets), la diferencia entre ellos son los 3 tweets que fueron el 7 de abril y los 3 tweets el 3 de abril .

Solo quiero que las líneas en new_tweets que no están en PTITVProgs aparezcan en el diff.

Pero arroja un montón de texto que no quiero ver. No sé qué significan *** 1,7*** y *** 1,3*** en la salida de diferencias para ...? ¿Cuál es la forma correcta de obtener solo las líneas cambiadas?


Existen múltiples estilos de diferencias y existen diferentes funciones para ellos en la biblioteca difflib . unified_diff , ndiff y context_diff .

Si no desea los resúmenes de número de línea, la función ndiff proporciona un delta de estilo Differ:

import difflib f1 = ''''''1 2 3 4 5'''''' f2 = ''''''1 3 4 5 6'''''' diff = difflib.ndiff(f1,f2) for l in diff: print(l)

Salida:

1 - 2 3 4 5 + 6

EDITAR:

También puede analizar el diff para extraer solo los cambios si eso es lo que desea:

>>>changes = [l for l in diff if l.startswith(''+ '') or l.startswith(''- '')] >>>for c in changes: print(c) >>> - 2 + 6


Simplemente analice la salida de diff como esto (cambie ''-'' a ''+'' si es necesario):

#!/usr/bin/env python # difflib_test import difflib file1 = open(''/home/saad/Code/test/new_tweets'', ''r'') file2 = open(''/home/saad/PTITVProgs'', ''r'') diff = difflib.ndiff(file1.readlines(), file2.readlines()) delta = ''''.join(x[2:] for x in diff if x.startswith(''- '')) print delta