danio900409
danio900409

Reputation: 265

Python - Checking if the data in the files is the same

I have two lists where I have the same number of files. The files in both folders have the same names, for example:

Test1 folder:
files.txt
test.txt
name.txt

and so on. In the test2 folder I have the same named files. How can I compare for each file if the data in both files is the same? So whether:

test1 / files.txt = test2 / files.txt
test1 / test.txt = test2 / test.txt
test1 / name.txt = test2 / name.txt
import os
import difflib

test1_path = "C:/Users/admin/Desktop/test1"
test2_path = "C:/Users/admin/Desktop/test2"

if os.path.exists(test1_path):
    files_test1 = []
    for name in os.listdir(test1_path):
        if os.path.isfile(os.path.join(test1_path, name)):
            files_test1.append(os.path.join(test1_path, name))

if os.path.exists(test2_path):
    files_test2 = []
    for name in os.listdir(test2_path):
        if os.path.isfile(os.path.join(test2_path, name)):
            files_test2.append(os.path.join(test2_path, name))


Are you able to advise something?

Upvotes: 0

Views: 247

Answers (1)

qouify
qouify

Reputation: 3920

You don't need to perform two loops. One is enough. Also you can use the filecmp package to compare file contents.

import os
import filecmp  #  to compare files

test1_path = 'C:/Users/admin/Desktop/test1'
test2_path = 'C:/Users/admin/Desktop/test2'

if os.path.exists(test1_path) and os.path.exists(test2_path):
    all_same = True
    for name in os.listdir(test1_path):
        file1 = os.path.join(test1_path, name)
        file2 = os.path.join(test2_path, name)
        if (
                os.path.isfile(file1) and
                os.path.isfile(file2) and
                not filecmp.cmp(file1, file2)
        ):
            all_same = False
    print('all files are the same:', all_same)

Note that the code can be simplified if you know for sure that both directories contain the same file names.

Upvotes: 1

Related Questions