Как добавить две строки в Python? - PullRequest
2 голосов
/ 29 июня 2009

Я делал эту операцию миллионы раз, просто используя оператор +! Я понятия не имею, почему в этот раз он не работает, он перезаписывает первую часть строки новой! У меня есть список строк, и я хочу объединить их в одну строку! Если я запускаю программу из Eclipse, она работает, из командной строки - нет! Список:

["UNH+1+XYZ:08:2:1A+%CONVID%'&\r", "ORG+1A+77499505:ABC+++A+FR:EUR++123+1A'&\r", "DUM'&\r"]

Я хочу отбросить первый и последний элементы, код:

        ediMsg = ""
        count = 1
        print "extract_the_info, lineList ",lineList
        print "extract_the_info, len(lineList) ",len(lineList)
        while (count < (len(lineList)-1)):
            temp = ""
#            ediMsg = ediMsg+str(lineList[count])
#            print "Count "+str(count)+" ediMsg ",ediMsg 
            print "line value : ",lineList[count]
            temp = lineList[count]
            ediMsg += " "+temp
            print "ediMsg     : ",ediMsg
            count += 1
            print "count ",count

Посмотрите на вывод:

extract_the_info, lineList  ["UNH+1+XYZ:08:2:1A+%CONVID%'&\r", "ORG+1A+77499505:ABC+++A+FR:EUR++123+1A'&\r", "DUM'&\r"]
extract_the_info, len(lineList)  8
line value :  ORG+1A+77499505:ABC+++A+FR:EUR++123+1A'&
ediMsg     :  ORG+1A+77499505:ABC+++A+FR:EUR++123+1A'&
count  2

line value :  DUM'&
 DUM'&     :  ORG+1A+77499505:ABC+++A+FR:EUR++123+1A'&
count  3

Почему это так!?

Ответы [ 6 ]

32 голосов
/ 29 июня 2009

Хотя оба ответа верны (используйте "" .join ()), ваша проблема (кроме очень некрасивого кода Python) такова:

Ваши строки заканчиваются на "\ r", что означает возврат каретки. Все хорошо, но когда вы печатаете на консоль, "\ r" заставит печать продолжаться с начала той же строки , следовательно, перезапишет то, что было написано в этой строке до сих пор.

21 голосов
/ 29 июня 2009

Вы должны использовать следующее и забыть об этом кошмаре:

''.join(list_of_strings)
11 голосов
/ 29 июня 2009

Проблема не в конкатенации строк (хотя для этого может потребоваться некоторая очистка), а в вашей печати. \ R в вашей строке имеет особое значение и будет перезаписывать ранее напечатанные строки.

Используйте repr () как таковое:

...
print "line value : ", repr(lineList[count])
temp = lineList[count]
ediMsg += " "+temp
print "ediMsg     : ", repr(ediMsg)
...

чтобы распечатать ваш результат, это позволит убедиться, что любые специальные символы не испортят вывод.

8 голосов
/ 29 июня 2009

'\ r' - символ возврата каретки. Когда вы печатаете строку, '\ r' заставит следующие символы идти в начале строки.

Изменить это:

print "ediMsg     : ",ediMsg

до:

print "ediMsg     : ",repr(ediMsg)

и вы увидите встроенные значения \r.

И пока ваш код работает, , пожалуйста, измените его на однострочный:

ediMsg = ' '.join(lineList[1:-1])
7 голосов
/ 29 июня 2009

Ваша проблема - это печать , а - это не манипулирование строками. Попробуйте использовать '\ n' в качестве последнего символа вместо '\ r' в каждой строке:

lineList = [
    "UNH+1+TCCARQ:08:2:1A+%CONVID%'&\r",
    "ORG+1A+77499505:PARAF0103+++A+FR:EUR++11730788+1A'&\r",
    "DUM'&\r",
    "FPT+CC::::::::N'&\r",
    "CCD+CA:5132839000000027:0450'&\r",
    "CPY+++AF'&\r",
    "MON+712:1.00:EUR'&\r",
    "UNT+8+1'\r"
]
5 голосов
/ 29 июня 2009

Я просто взглянул на это. Кажется, ваша проблема возникает, когда вы печатаете текст. Я давно такого не делал, но, вероятно, вы получите только последнюю строку при печати. Если вы проверите фактическую переменную, я уверен, что вы найдете правильное значение.

В последней строке я говорю о том, что вы получили в текстовых строках.

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