-
Notifications
You must be signed in to change notification settings - Fork 0
/
reference_medic.py
93 lines (86 loc) · 3.98 KB
/
reference_medic.py
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import os
from tqdm import tqdm
import time
import re
def inner_matcher(file_ending, folder, line, f, pattern, is_jupyter=False):
match = re.search(pattern, line)
if match:
filename = match.group()
new_path = '../{}/{}'.format(folder,filename) if is_jupyter else './config/{}'.format(filename)
# replace the path in the line with the new path and add the open statement
f.write(line.replace(filename, new_path))
else:
f.write(line)
def update_paths(file_path, is_jupyter=False):
try:
with open(file_path, 'r') as f:
lines = f.readlines()
except UnicodeDecodeError:
return
with open(file_path, 'w') as f:
for line in lines: # for each line in the file
# if the line is a comment skip it
if line.startswith('#'):
f.write(line)
continue
pattern = r'(?<=\().*?(?=[\'"])'
if line.startswith('with'):
match = re.search(pattern, line)
if match:
filename = match.group()
new_path = '../config/{}'.format(filename) if is_jupyter else './config/{}'.format(filename)
# replace the path in the line with the new path and add the open statement
f.write(line.replace(filename, new_path))
else:
f.write(line)
# if json, or jsonl in the line then it goes in config folder
if '.json' in line:
inner_matcher('.json', 'config', line, f, pattern, is_jupyter)
# if .txt in the line then it goes in data folder
elif '.jsonl' in line:
inner_matcher('.jsonl', 'config', line, f, pattern, is_jupyter)
elif '.txt' in line:
inner_matcher('.txt', 'data', line, f, pattern, is_jupyter)
# if .csv in the line then it goes in data folder
elif '.csv' in line:
inner_matcher('.csv', 'data', line, f, pattern, is_jupyter)
# if .png in the line then it goes in images folder
elif '.png' in line:
inner_matcher('.png', 'images', line, f, pattern, is_jupyter)
# if .jpg in the line then it goes in images folder
elif '.jpg' in line:
inner_matcher('.jpg', 'images', line, f, pattern, is_jupyter)
# if .jpeg in the line then it goes in images folder
elif '.jpeg' in line:
inner_matcher('.jpeg', 'images', line, f, pattern, is_jupyter)
# if .gif in the line then it goes in images folder
elif '.gif' in line:
inner_matcher('.gif', 'images', line, f, pattern, is_jupyter)
# if .svg in the line then it goes in images folder
elif '.svg' in line:
inner_matcher('.svg', 'images', line, f, pattern, is_jupyter)
# if .ipynb in the line then it goes in notebooks folder
elif '.ipynb' in line:
inner_matcher('.ipynb', 'notebooks', line, f, pattern, is_jupyter)
# if .py in the line then it goes in src folder
elif '.py' in line:
inner_matcher('.py', 'src', line, f, pattern, is_jupyter)
def scan_folder(folder_path):
for dirpath, dirnames, filenames in tqdm(os.walk(folder_path), desc='Scanning folder'):
for filename in tqdm(filenames, desc='\nUpdating file refs'):
if filename == 'reference_medic.py':
continue # skip this file
print('\nUpdating file: {} '.format(filename))
#time.sleep(0.1)
file_path = os.path.join(dirpath, filename)
if '.ipynb' in file_path:
is_jupyter = True
update_paths(file_path, is_jupyter)
elif '.py' in file_path:
is_jupyter = False
update_paths(file_path, is_jupyter)
def main():
is_jupyter = False
scan_folder('./')
if __name__ == '__main__':
main()