| ORI_FOLDER = "" |
| DES_FOLDER = "" |
|
|
| import os |
| import math |
| import random |
| import subprocess |
| from tqdm import tqdm |
| from multiprocessing import Pool |
|
|
| def convert_abc2xml(file_list): |
| cmd = 'python abc2xml.py ' |
| for file in tqdm(file_list): |
| filename = file.split('/')[-1] |
| os.makedirs(DES_FOLDER, exist_ok=True) |
|
|
| try: |
| p = subprocess.Popen(cmd + '"' + file + '"', stdout=subprocess.PIPE, shell=True) |
| result = p.communicate() |
| output = result[0].decode('utf-8') |
|
|
| if output == '': |
| with open("logs/abc2xml_error_log.txt", "a", encoding="utf-8") as f: |
| f.write(file + '\n') |
| continue |
| else: |
| output_path = f"{DES_FOLDER}/" + ".".join(filename.split(".")[:-1]) + ".xml" |
| with open(output_path, 'w', encoding='utf-8') as f: |
| f.write(output) |
| except Exception as e: |
| with open("logs/abc2xml_error_log.txt", "a", encoding="utf-8") as f: |
| f.write(file + ' ' + str(e) + '\n') |
| pass |
|
|
| if __name__ == '__main__': |
| file_list = [] |
| os.makedirs("logs", exist_ok=True) |
|
|
| |
| for root, dirs, files in os.walk(ORI_FOLDER): |
| for file in files: |
| if not file.endswith(".abc"): |
| continue |
| filename = os.path.join(root, file).replace("\\", "/") |
| file_list.append(filename) |
|
|
| |
| file_lists = [] |
| random.shuffle(file_list) |
| for i in range(os.cpu_count()): |
| start_idx = int(math.floor(i * len(file_list) / os.cpu_count())) |
| end_idx = int(math.floor((i + 1) * len(file_list) / os.cpu_count())) |
| file_lists.append(file_list[start_idx:end_idx]) |
|
|
| pool = Pool(processes=os.cpu_count()) |
| pool.map(convert_abc2xml, file_lists) |