Как бы я вставил число в уже существующий скрипт и повторил 3544 раза

#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. Итак, как бы лучше всего подойти к этому? Было бы неплохо иметь руководство по чтению текстовых файлов для ввода для обработки, но я попробую это сделать, чтобы посмотреть, работает ли это.