كود بايثون استخراج النصوص من ملف txt واعادة دمجها

أضف رد جديد
Moath
Site Admin
مشاركات: 13
اشترك في: الجمعة مايو 30, 2025 2:33 am

كود بايثون استخراج النصوص من ملف txt واعادة دمجها

مشاركة بواسطة Moath »

كود: تحديد الكل

#!/usr/bin/env python3
import re
import json
import argparse

def extract(input_path, translation_path, mapping_path):
    """
    Extract readable English text from the original file, replacing tags/codes/entities
    with unique placeholders, and save the translation template and mapping JSON.
    """
    mapping = {}
    counter = 0
    translations = []
    # يطابق أي وسم XML أو كود موضوع بين { }
    pattern = re.compile(r'(<[^>]*>|{[^}]*})')

    with open(input_path, 'r', encoding='utf-8') as f:
        for line in f:
            last_end = 0
            line_translated = ''
            for m in pattern.finditer(line):
                # نص قبل الكود/الوسم
                line_translated += line[last_end:m.start()]
                # إنشاء العنصر النائب
                placeholder = f'{{#{counter}}}'
                mapping[placeholder] = m.group(0)
                counter += 1
                # إضافة العنصر النائب
                line_translated += placeholder
                last_end = m.end()
            # إضافة بقية السطر
            line_translated += line[last_end:]
            translations.append(line_translated)

    # حفظ ملف القالب للترجمة
    with open(translation_path, 'w', encoding='utf-8') as f:
        f.writelines(translations)

    # حفظ خريطة الأكواد/الوسوم إلى JSON
    with open(mapping_path, 'w', encoding='utf-8') as f:
        json.dump(mapping, f, ensure_ascii=False, indent=2)


def merge(translation_path, mapping_path, output_path):
    """
    Merge translated text back by replacing placeholders with the original codes/entities.
    """
    # تحميل الخريطة
    with open(mapping_path, 'r', encoding='utf-8') as f:
        mapping = json.load(f)

    # قراءة ملف الترجمة بعد المعالجة الخارجية
    with open(translation_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    merged_lines = []
    for line in lines:
        # استبدال كل عنصر نائب بالكود الأصلي
        for placeholder, code in mapping.items():
            line = line.replace(placeholder, code)
        merged_lines.append(line)

    # حفظ الناتج المدمج
    with open(output_path, 'w', encoding='utf-8') as f:
        f.writelines(merged_lines)


def main():
    parser = argparse.ArgumentParser(
        description="Extract and merge translations with placeholders."
    )
    parser.add_argument(
        "action",
        choices=["extract", "merge"],
        help="Action to perform: 'extract' to create template, 'merge' to reintegrate"
    )
    parser.add_argument(
        "--input", "-i",
        default="Game.locres.txt",
        help="Path to the original file"
    )
    parser.add_argument(
        "--translation", "-t",
        default="Game_translation.txt",
        help="Path to the translation output file"
    )
    parser.add_argument(
        "--mapping", "-m",
        default="Game_mapping.json",
        help="Path to the mapping JSON file"
    )
    parser.add_argument(
        "--output", "-o",
        default="Game_merged.txt",
        help="Path to the merged output file"
    )
    args = parser.parse_args()

    if args.action == "extract":
        extract(args.input, args.translation, args.mapping)
        print(f"Template created: {args.translation}")
        print(f"Mapping saved: {args.mapping}")
    elif args.action == "merge":
        merge(args.translation, args.mapping, args.output)
        print(f"Merged file saved: {args.output}")


if __name__ == "__main__":
    main()
قم تعديل هذا القسم على حسب استخدامك
# يطابق أي وسم XML أو كود موضوع بين { }
(r'(<[^>]*>|{[^}]*})')
أضف رد جديد