How to use cmp() function to compare 2 files?

Y

yinglcs

Hi,

i have 2 files which are different (1 line difference):
$ diff groupresult20070226190027.xml groupresult20070226190027-2.xml
5c5
< x:22 y:516 w:740 h:120 area:
---
x:22 y:516 w:740 h:1202 area:


But when I use the cmp() function to compare 2 files, it return "1",

$ python Python 2.4.3 (#1, Oct 23 2006, 14:19:47)
[GCC 4.1.1 20060525 (Red Hat 4.1.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.1

Can you please tell me why? And how can I compare the content of 2
files in python?
 
D

Dan Bishop

Hi,

i have 2 files which are different (1 line difference):
$ diff groupresult20070226190027.xml groupresult20070226190027-2.xml
5c5
< x:22 y:516 w:740 h:120 area:
---
x:22 y:516 w:740 h:1202 area:

But when I use the cmp() function to compare 2 files, it return "1",

$ python Python 2.4.3 (#1, Oct 23 2006, 14:19:47)
[GCC 4.1.1 20060525 (Red Hat 4.1.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.>>> cmp("groupresult20070226190027.xml", "groupresult20070226190027-2.xml")

1

Can you please tell me why?

Because '.' > '-' (character 25 of each string).

But this is comparing the filenames, which isn't what you want to do.
And how can I compare the content of 2
files in python?

Use the difflib module.
 
Y

yinglcs

i have 2 files which are different (1 line difference):
$ diff groupresult20070226190027.xml groupresult20070226190027-2.xml
5c5
< x:22 y:516 w:740 h:120 area:
---
But when I use the cmp() function to compare 2 files, it return "1",
$ python Python 2.4.3 (#1, Oct 23 2006, 14:19:47)
[GCC 4.1.1 20060525 (Red Hat 4.1.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.>>> cmp("groupresult20070226190027.xml", "groupresult20070226190027-2.xml")

Can you please tell me why?

Because '.' > '-' (character 25 of each string).

But this is comparing the filenames, which isn't what you want to do.
And how can I compare the content of 2
files in python?

Use the difflib module.

Thanks, but from here:
http://doc.astro-wise.org/difflib.html
it said it is just for comparing 2 sequence of strings, not files.

How can I use that to compare content of 2 files?
 
Y

yinglcs

Hi,
i have 2 files which are different (1 line difference):
$ diff groupresult20070226190027.xml groupresult20070226190027-2.xml
5c5
< x:22 y:516 w:740 h:120 area:
---
x:22 y:516 w:740 h:1202 area:
But when I use the cmp() function to compare 2 files, it return "1",
$ python Python 2.4.3 (#1, Oct 23 2006, 14:19:47)
[GCC 4.1.1 20060525 (Red Hat 4.1.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.>>> cmp("groupresult20070226190027.xml", "groupresult20070226190027-2.xml")
1
Can you please tell me why?
Because '.' > '-' (character 25 of each string).
But this is comparing the filenames, which isn't what you want to do.
Use the difflib module.

I try this:
f1 = open("f1",'r')
f2 = open("f2", 'r')


if (difflib.context_diff(f1.readlines(), f2.readlines()).len()
== 0):

But I get this error:
Traceback (most recent call last):
File "./scripts/regressionTest.py", line 72, in ?
runTest(savedPagesDirectory, outputDir, expectedResultDir,
failedDir);
File "./scripts/regressionTest.py", line 60, in runTest
getSnapShot(fileName, testNo, outputDir, expectedResultDir,
failedDir)
File "./scripts/regressionTest.py", line 30, in getSnapShot
if (difflib.context_diff(f1.readlines(), f2.readlines()).len() ==
0):
# no difference
else:
# files are different
AttributeError: 'generator' object has no attribute 'len'

Can you please help?
 
M

Marc 'BlackJack' Rintsch

File "./scripts/regressionTest.py", line 30, in getSnapShot
if (difflib.context_diff(f1.readlines(), f2.readlines()).len() ==
0):
# no difference
else:
# files are different
AttributeError: 'generator' object has no attribute 'len'

Can you please help?

The function returns a generator/iterator over the differences which has
no `len()` method. If you just want to know if two files are equal or not
use `filecmp.cmp()`. Read the docs about the `shallow` argument of that
function.

Ciao,
Marc 'BlackJack' Rintsch
 
S

samuel.y.l.cheung

The function returns a generator/iterator over the differences which has
no `len()` method. If you just want to know if two files are equal or not
use `filecmp.cmp()`. Read the docs about the `shallow` argument of that
function.

Ciao,
Marc 'BlackJack' Rintsch

Thanks. I use that before, it does not work for me, since it always
return 1, regardless if the file content of 2 files are different or
not.
 
J

Jussi Salmela

(e-mail address removed) kirjoitti:
Thanks. I use that before, it does not work for me, since it always
return 1, regardless if the file content of 2 files are different or
not.

I think you are mixing cmp and filecmp.cmp. They are two different beasts.

Cheers,
Jussi
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,266
Messages
2,571,076
Members
48,772
Latest member
Backspace Studios

Latest Threads

Top