Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Python: Поиск по трём файлам и запись в одном из них

Помогите написать скрипт на питоне, очень нужно, задача которого будет состоять в том, чтобы делать поиск по трем файлам и запись в одном из них.

В общем есть три файла. Два текстовых и один xml.

Первый файл под названием file1.txt (7мб) по нему и начинается поиск, и в него делается запись, а содержимое у него такое:

# EVENT_WAIT
= 0, 0, 0, 0, 0, 0, 0, 1, 0
> 30, 750,
INGAME ENGLISH: [%male#1] holds up the ball
REPORT ENGLISH: [%male#1] held up the ball
REPLAY ENGLISH:
> 30, 750,
INGAME ENGLISH: [%male#1] is forced to hold onto the ball
REPORT ENGLISH: [%male#1] was forced to hold onto the ball
REPLAY ENGLISH:
> 30, 750,
INGAME DUTCH: [%male#1] houdt de bal bij
REPORT DUTCH: [%male#1] vertraagde het spel
REPLAY DUTCH:
> 30, 750,
INGAME DUTCH: [%male#1] vindt geen afspeelpunt
REPORT DUTCH: [%male#1] vond geen afspeelpunt
REPLAY DUTCH:
> 30, 750,
INGAME FRENCH: [%male#1] conserve le ballon
REPORT FRENCH: [%male#1] a temporisé
REPLAY FRENCH:
И так далее. Там много языков.

Нам нужны только те строки, которые начинаются так:

INGAME ENGLISH: здесь текст по которому надо совершать поиск и заменять его
REPORT ENGLISH: здесь текст по которому надо совершать поиск и заменять его

В общем таких строк в файле будет около 10 000.

Остальные строки (не INGAME ENGLISH и REPORT ENGLISH) остаются неизменными.

Также есть второй файл под названием file2.xml (4мб), у него такое содержимое:

<record>
<list id="evts">
<record>
<integer value="0" id="id"/>
<list id="evar">
<record>
<translation_record id="game" translation_id="369937" type="use" value="[%male#1] holds up the ball[COMMENT: FR 0; FR 499;EVENT_WAIT;INGAME; EVENT_HOLD_NEAR_CORNER_FLAG;INGAME;]"/>
<translation_record id="rply" translation_id="369787" type="use" value="[%male#1] held up the ball[COMMENT: FR 0;EVENT_WAIT;REPORT;]"/>
<integer id="prob" value="30"/>
<integer id="dely" value="3"/>
</record>

и так далее.

Как видно там есть текст, который содержится в первом файле, то есть:

[%male#1] holds up the ball
[%male#1] held up the ball
Перед найденным текстом есть номер, он нам и нужен. Это 369937 для первой строки, и 369787 для второй строки.

И теперь третий файл file3.txt (63мб), в котором содержатся непосредственно те строки, которые нам нужны, все они пронумерованы. Вот кусочек из третьего файла:

STR-369937
[%male#1] владеет мячом

STR-369938
[%male#1] ищет направление для развития атаки...

Нам нужно совершить поиск в третьем файле по тем двум номерам, которые мы нашли, то есть 369937 и 369787. И текст, который ниже этого номера (STR-...), нужно скопировать и заменить вместо того, который содержится в файле номер 1.

Получится так:

INGAME ENGLISH: [%male#1] владеет мячом
REPORT ENGLISH: [%male#1] ищет направление для развития атаки...

Цель - перевести первый файл с английского на русский.
Кто поможет, оставьте пожалуйста реквизиты для благодарности, потому что очень надо)

По дате
По рейтингу
Аватар пользователя
Мыслитель

Скрипт на Python, который решает задачу поиска и замены текста в файлах в соответствии с вашими требованиями:

def find_replace_text(file1_path, file2_path, file3_path):
# Чтение содержимого файла 1
with open(file1_path, 'r') as file1:
file1_content = file1.readlines()

# Чтение содержимого файла 2
with open(file2_path, 'r') as file2:
file2_content = file2.read ()

# Извлечение номеров из файла 2
numbers = []
start_index = file2_content.find("translation_id=\"")
while start_index != -1:
end_index = file2_content.find("\"", start_index + 16)
number = file2_content[start_index + 16:end_index]
numbers.append(number)
start_index = file2_content.find("translation_id=\"", end_index)

# Чтение содержимого файла 3
with open(file3_path, 'r') as file3:
file3_content = file3.read ()

# Замена текста в файле 1 на основе номеров из файла 3
for number in numbers:
search_string = "STR-" + number + "\n"
start_index = file3_content.find(search_string)
if start_index != -1:
end_index = file3_content.find("\n\n", start_index)
if end_index != -1:
replacement_text = file3_content[start_index + len(search_string):end_index]
for i in range(len(file1_content)):
if file1_content[i].startswith("INGAME ENGLISH:") or file1_content[i].startswith("REPORT ENGLISH:"):
file1_content[i] = file1_content[i].split(":")[0] + ": " + replacement_text + "\n"

# Запись обновленного содержимого в файл 1
with open(file1_path, 'w') as file1:
file1.writelines(file1_content)


# Пример использования
file1_path = 'file1.txt'
file2_path = 'file2.xml'
file3_path = 'file3.txt'
find_replace_text(file1_path, file2_path, file3_path)

Примечания:

Замените 'file1.txt', 'file2.xml' и 'file3.txt' на пути к вашим соответствующим файлам.
Обратите внимание, что этот скрипт работает только с указанными структурами файлов. Если структуры файлов будут отличаться, может потребоваться изменение скрипта.
Убедитесь, что у вас есть достаточно свободного места на диске для обработки файлов большого размера.
Обязательно создайте резервные копии ваших файлов перед запуском скрипта, чтобы в случае необходимости можно было вернуться к исходным данным.
Пожалуйста, помните, что использование скриптов и изменение файлов на вашу ответственность.

Аватар пользователя
Знаток

Делать скрипт за простое человеческое спасибо? (=