#python
Вопрос:
У меня есть сценарий для модификации видеоигры, который нужно повторить 3544 раза.
country_event = { id = 5893X title = "Aquire $PROVINCENAME$" desc = "$COUNTRY$ is surrendering a province to us." picture = "administration" trigger = { has_country_flag = won_acquire_prov NOT = { has_country_flag = prov_treaty } any_country = { limit = { truce_with = THIS NOT = { X = { owned_by = THIS } } } } } option = { name = "Take $PROVINCENAME$" X = { secede_province = THIS } } option = { name = "We don't want $PROVINCENAME$" } option = { name = "End Province arbitration" set_country_flag = prov_treaty } }
Цель состоит в том, чтобы заменить «X» числом в диапазоне от 1 до 3544, для каждого числа будет еще одно «событие страны». Но я не уверен, как это сделать.
Я пробовал использовать скрипт на python:
infile = open("provids.txt", "r") outfile = open("0_provs_event.txt","w") for line in infile: if len(line) gt; 5: if line[5] == "=": prov = line.split("/")[1].split(".")[0] if prov != "REB": #^^^ Code does not change file if above is removed newline = "country_event = { id = 5893" prov "title = Aquire $PROVINCENAME$ desc = $COUNTRY$ is surrendering a province to us. picture = administration trigger = { has_country_flag = won_aquire_prov NOT = { has_country_flag = prov_treaty } any_country = { limit = { truce_with = THIS NOT = {" tag "= { owned_by = THIS } } } } } option = { name = Take $PROVINCENAME$ " prov " = { secede_province = THIS } } option = { name = We don't want $PROVINCENAME$ } option = { name = End Province arbitration set_country_flag = prov_treaty } } n" outfile.write(newline) infile.close() outfile.close()
Я не смог заставить его работать. Он просто создает файл и больше ничего не делает.
Комментарии:
1. Не могли бы вы немного подробнее рассказать, как ваш код связан с предоставленным вами файлом? Например, я не вижу в этом места, где
line[5] == "="
это было бы правдой. Там тоже нет места с a/
, так как же это моглоprov = line.split("/")[1].split(".")[0]
сработать? Может быть, я упускаю что-то очевидное?
Ответ №1:
Главный вопрос в том, как вы читаете в infile
При вызове open
python откроет файл как '_io.TextIOWrapper'
класс , содержащий, помимо прочего, метаданные о файле. Если вам нужен текст файла в виде списка строк, где каждая строка представляет собой строку файла (которая, по-видимому, является тем, что вы хотите), вам потребуется read
файл. Это можно сделать, используя infile.read()
, если вы хотите, чтобы все это было одной строкой, или infile.readlines()
если вы хотите, чтобы каждая строка была элементом списка
Мой предпочтительный способ чтения файлов на python заключается в следующем:
# Setup file paths, and something to store your output which will be written to outfile_path infile_path = "path_to_infile" outfile_path = "path_to_outfile" outfile = [] with open(infile_path, 'r') as f: # Open infile_path into f as a readable object infile = f.readlines() # Read through f and place each line as an element in a list for line in infile: # do stuff, append lines to outfile outfile = "n".join(outfile) # Turn the list outfile into a string with character returns between each line with open(outfile_path, 'w') as f: # Open outfile_path into f as a writable object f.write(outfile) # Write out the string outfile to f
Преимущество этой with open
версии в том, что вам не нужно запоминать, чтобы закрыть файл после этого, что автоматически происходит после with
блокировки (после удаления в коде).
Комментарии:
1.
for line in infile
это распространенный и идиоматический способ перебора строк файла. Нет необходимости звонитьread()
илиreadlines()
.2. Итак, как бы лучше всего подойти к этому? Было бы неплохо иметь руководство по чтению текстовых файлов для ввода для обработки, но я попробую это сделать, чтобы посмотреть, работает ли это.