Как мне вывести несколько файлов с РАЗНОЙ информацией?

#python

#python

Вопрос:

Я пытаюсь прочитать информацию из двух разных файлов. Первый файл, «база данных», представляет собой файл, содержащий имена людей и различные части информации об этих людях. Каждый пользователь (и его информация) отделяется строкой от других пользователей. Второй файл, «template», представляет собой шаблон нежелательной почты с пронумерованными заполнителями. Моя цель — прочитать информационные части базы данных в пронумерованные заполнители в шаблоне и вывести файл для каждого пользователя (3 человека в базе данных). Таким образом, у меня должно быть 3 выходных файла.

 database = open("database", "r")

template = open("template", "r")

outfile1 = open("junk1", "w")

outfile2 = open("junk2", "w")

outfile3 = open("junk3", "w")

for line in database:
    part = line.split("|")
    title = part[0] #replaces #1
    firstname = part[1] #replaces #2
    lastname = part[2] #replaces #3
    address = part[3] #replaces #4
    city = part[4] #replaces #5
    state = part[5] #replaces #6
    zipcode = part[6] #replaces #7


for line in template:
    string = line

    for r in (("|1|",title),("|2|", firstname),("|3|", lastname),("|4|", address),("|5|", city),("|6|", state),("|7|", zipcode)):
        string = string.replace(*r)
    outfile1.write(string)
    outfile2.write(string)
    outfile3.write(string)          


outfile1.close()
outfile2.close()
outfile3.close()



database.close()
template.close()
  

Я хочу, чтобы он выводился в 3 РАЗНЫХ файла. В настоящее время он выводит 3 файла, но каждый вывод шаблона имеет имя и информацию только из последней строки. Мне нужно, чтобы в первом файле был шаблон с заполненной информацией первого пользователя, второй файл содержал информацию второго пользователя, третий файл содержал информацию третьего лица.

Комментарии:

1. вам пришлось бы использовать for line, output in zip(database, [outfile1, outfile2, outfile2]) и запускать шаблон внутри этого for цикла

2. Можете ли вы уточнить «запустить шаблон внутри этого цикла for?»

3. вы могли бы использовать форматирование строки вместо replace() "{0}, Hello {1}".format(title, firstname)

4. Зачем мне менять часть замены? Кажется, это работает нормально. Я не уверен, что вы предлагаете… Похоже, что проблема может заключаться в размещении outfile1.write(string), как будто он неправильно выполняет итерацию по строкам базы данных.

5. это место для комментариев, а не для решений. В комментарии мы можем предложить изменения, которые не имеют ничего общего с isuess.

Ответ №1:

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

Это может быть что-то вроде этого

 database = open("database", "r")

# read all to memory to use it many times in `for` loop
template = list(open("template", "r"))

outfile1 = open("junk1", "w")
outfile2 = open("junk2", "w")
outfile3 = open("junk3", "w")

for line, output in zip(database, [outfile1, outfile2, outfile3]):
    part = line.split("|")
    title = part[0] #replaces #1
    firstname = part[1] #replaces #2
    lastname = part[2] #replaces #3
    address = part[3] #replaces #4
    city = part[4] #replaces #5
    state = part[5] #replaces #6
    zipcode = part[6] #replaces #7

    for string in template:
        for r in (("|1|", title),("|2|", firstname),("|3|", lastname),("|4|", address),("|5|", city),("|6|", state),("|7|", zipcode)):
           string = string.replace(*r)
        output.write(string)

outfile1.close()
outfile2.close()
outfile3.close()
  

С помощью zip() вы получаете первую строку из базы данных с первым файлом и заполняете шаблон, используя первые данные, и сохраняете в первом файле, затем вы получаете вторую строку из базы данных со вторым файлом, и вы заполняете шаблон, используя вторые данные, и сохраняете во втором файле и т.д.

Комментарии:

1. Хорошо… Этот код выводится немного иначе, чем у меня, но не совсем правильно. Это создает правильный вывод в первом файле, но оставляет второй и третий выходные файлы пустыми…

2. Теперь я вижу, что вы читаете шаблон непосредственно из файла, поэтому после первого использования он считывается с конца файла, и это ничего не дает — вы можете повторно открыть шаблон или прочитать его в список при запуске.