我已经完成了数百万次此操作,只需使用+
运算符!我不知道为什么它这次不工作,它用新的覆盖了字符串的第一部分!我有一个字符串列表,只想在一个字符串中连接它们!如果我从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
为什么会这样做??
答案 0 :(得分:32)
虽然两个答案都是正确的(使用“”.join()),但你的问题(除了非常丑陋的python代码)是这样的:
你的字符串以“\ r”结尾,这是一个回车符。一切都很好,但是当你打印到控制台时,“\ r”将从同一行的开始继续打印,因此覆盖到目前为止在该行上写的内容。
答案 1 :(得分:21)
你应该使用以下内容而忘记这个噩梦:
''.join(list_of_strings)
答案 2 :(得分:11)
问题不在于字符串的连接(尽管可能会使用一些清理),但在打印时。字符串中的\ r \ n具有特殊含义,将覆盖以前打印的字符串。
使用repr(),如下:
...
print "line value : ", repr(lineList[count])
temp = lineList[count]
ediMsg += " "+temp
print "ediMsg : ", repr(ediMsg)
...
打印出你的结果,这将确保任何特殊字符不会弄乱输出。
答案 3 :(得分:8)
'\ r'是回车符。当你打印出一个字符串时,'\ r'将导致下一个字符出现在行的开头。
改变这个:
print "ediMsg : ",ediMsg
为:
print "ediMsg : ",repr(ediMsg)
您将看到嵌入的\r
值。
当您的代码有效时,请将其更改为单行代码:
ediMsg = ' '.join(lineList[1:-1])
答案 4 :(得分:7)
您的问题 打印,不是字符串操作。尝试使用'\ 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 :(得分:5)
我只是快速看一下。当您打印文本时,似乎出现了问题。我很长时间没有做过这样的事情,但是你可能只在打印时得到最后一行。如果你检查实际变量,我相信你会发现值是正确的。
到最后一行,我说的是你在文本字符串中得到的\。