-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
50 lines (36 loc) · 1.52 KB
/
utils.py
File metadata and controls
50 lines (36 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
import filecmp
import difflib
UTILS_VERBOSE = True
def compare_directories(dir1, dir2, verbose):
global UTILS_VERBOSE
UTILS_VERBOSE = verbose
comparison_logs = ""
dir_comparison = filecmp.dircmp(dir1, dir2)
for file_name in dir_comparison.common_files:
file1 = os.path.join(dir1, file_name)
file2 = os.path.join(dir2, file_name)
comparison_logs += compare_files(file1, file2)
for subdir in dir_comparison.common_dirs:
comparison_logs += compare_directories(os.path.join(dir1, subdir), os.path.join(dir2, subdir), verbose)
for file_name in dir_comparison.left_only:
comparison_logs += print_and_return(f"File {file_name} only in {dir1}")
for file_name in dir_comparison.right_only:
comparison_logs += print_and_return(f"File {file_name} only in {dir2}")
return comparison_logs
def compare_files(file1, file2):
comparison_logs = ""
with open(file1, 'r', encoding="utf8") as f1, open(file2, 'r', encoding="utf8") as f2:
file1_lines = f1.readlines()
file2_lines = f2.readlines()
diff = list(difflib.unified_diff(file1_lines, file2_lines, fromfile=file1, tofile=file2, lineterm=''))
if len(diff) > 40:
comparison_logs += print_and_return(f"Too many differences in {file1} vs {file2}. Please check manually.")
else:
for line in diff:
comparison_logs += print_and_return(line)
return comparison_logs
def print_and_return(str):
if UTILS_VERBOSE:
print(str)
return str + "\n"