функция замены не работает с элементами списка - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь использовать функцию замены, чтобы взять элементы из списка и заменить поля ниже соответствующими значениями, но независимо от того, что я делаю, кажется, что он работает только тогда, когда достигает конца диапазона (на этомпоследнее возможное значение i, оно успешно заменяет подстроку, но до этого этого не происходит)

    for i in range(len(fieldNameList)):
        foo = fieldNameList[i]
        bar = fieldValueList[i]
        msg = msg.replace(foo, bar)
        print msg

Это то, что я получаю после запуска этого кода

<<name>> <<color>> <<age>>

<<name>> <<color>> <<age>>

<<name>> <<color>> 18

Я былзастрял на этом слишком долго.Любой совет будет принята с благодарностью.Спасибо:)

Полный код:

def writeDocument():
    msgFile = raw_input("Name of file you would like to create or write to?: ")
    msgFile = open(msgFile, 'w+')
    msg = raw_input("\nType your message here. Indicate replaceable fields by surrounding them with \'<<>>\' Do not use spaces inside your fieldnames.\n\nYou can also create your fieldname list here. Write your first fieldname surrounded by <<>> followed by the value you'd like to assign, then repeat, separating everything by one space. Example: \"<<name>> ryan <<color>> blue\"\n\n")
    msg = msg.replace(' ', '\n')
    msgFile.write(msg)
    msgFile.close()
    print "\nDocument written successfully.\n"

def fillDocument():
    msgFile = raw_input("Name of file containing the message you'd like to fill?: ")
    fieldFile = raw_input("Name of file containing the fieldname list?: ")

    msgFile = open(msgFile, 'r+')
    fieldFile = open(fieldFile, 'r')

    fieldNameList = []
    fieldValueList = []
    fieldLine = fieldFile.readline()
    while fieldLine != '':
        fieldNameList.append(fieldLine)
        fieldLine = fieldFile.readline()
        fieldValueList.append(fieldLine)
        fieldLine = fieldFile.readline()

    print fieldNameList[0]
    print fieldValueList[0]
    print fieldNameList[1]
    print fieldValueList[1]
    msg = msgFile.readline()

    for i in range(len(fieldNameList)):
        foo = fieldNameList[i]
        bar = fieldValueList[i]
        msg = msg.replace(foo, bar)
        print msg

    msgFile.close()
    fieldFile.close()



###Program Starts#####--------------------

while True==True:
    objective = input("What would you like to do?\n1. Create a new document\n2. Fill in a document with fieldnames\n")
    if objective == 1:
        writeDocument()
    elif objective == 2:
        fillDocument()
    else:
        print "That's not a valid choice."

Файл сообщения:

<<name>> <<color>> <<age>>

Файл с именем поля:

<<name>>
ryan
<<color>>
blue
<<age>>
18

1 Ответ

0 голосов
/ 24 октября 2018

Причина:

Это связано с тем, что все строки, кроме последней строки, прочитанной из файла «Fieldname», содержат символы «\n».Поэтому, когда программа подходит к заменяющей части fieldNameList, fieldValueList и msg выглядит следующим образом:

fieldNameList = ['<<name>>\n', '<<color>>\n', '<<age>>\n']
fieldValueList = ['ryan\n', 'blue\n', '18']
msg = '<<name>> <<color>> <<age>>\n'

, поэтому функция replace () фактически ищет '<<name>>\n', '<<color>>\n','<<age>>\n' в строке сообщения и только поле <<age>> заменяется (у вас должен быть символ "\n" в конце файла сообщения, иначе он также не будет заменен).

Решение:

использовать метод rstrip() при чтении строк для удаления символа новой строки в конце.

fieldLine = fieldFile.readline().rstrip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...