Python-\n出现在串联字符串中

Python-\n出现在串联字符串中,python,string,concatenation,Python,String,Concatenation,我的Python代码一直存在问题。我试图连接两个字符串对象的值,但当我运行代码时,它会在两个字符串之间一直打印“\n”。 我的代码: while i < len(valList): curVal = valList[i] print(curVal) markupConstant = 'markup.txt' markupFileName = curVal + markupConstant markupFile = open(markupFileNam

我的Python代码一直存在问题。我试图连接两个字符串对象的值,但当我运行代码时,它会在两个字符串之间一直打印“\n”。 我的代码:

while i < len(valList):
    curVal = valList[i]
    print(curVal)
    markupConstant = 'markup.txt'
    markupFileName = curVal + markupConstant
    markupFile = open(markupFileName)
而i
现在,当我运行此命令时,会出现以下错误:

OSError:[Errno 22]无效参数:“cornWhiteTrimmed\n markup.txt”

看到这两个字符串之间的\n吗?我已经通过单独打印每个字符串对代码进行了一些剖析,但没有一个单独包含\n。你知道我做错了什么吗


提前谢谢

串联本身肯定不会添加
\n
valList
可能是对文件对象调用
readlines()
的结果,因此其中的每个元素都有一个尾随
\n
。在使用前调用每个元素:

while i < len(valList):
    curVal = valList[i].strip()
    print(curVal)
    markupConstant = 'markup.txt'
    markupFileName = curVal + markupConstant
    markupFile = open(markupFileName)
而i
串联本身肯定不会添加
\n
valList
可能是对文件对象调用
readlines()
的结果,因此其中的每个元素都有一个尾随
\n
。在使用前调用每个元素:

while i < len(valList):
    curVal = valList[i].strip()
    print(curVal)
    markupConstant = 'markup.txt'
    markupFileName = curVal + markupConstant
    markupFile = open(markupFileName)
而i
在实际打印python语句时,您没有看到\n的原因是\n从技术上讲是换行符。当您实际打印时,您将看不到这一点,它只会跳到新行。问题是当你在你的两个字符串中间,这会引起问题。解决您的问题的方法是剥离法。您可以在此处阅读其文档(),但基本上可以使用此方法从任何字符串中删除换行符。

在实际打印python语句时,您没有看到换行符的原因是\n从技术上讲是换行符。当您实际打印时,您将看不到这一点,它只会跳到新行。问题是当你在你的两个字符串中间,这会引起问题。解决您的问题的方法是剥离法。您可以在此处阅读其文档(),但基本上您可以使用此方法从任何字符串中删除换行符。

只是为了补充其他答案,解释为什么会出现这种情况:

当您需要实际检查字符串包含的字符时,您不能简单地打印它。许多字符在打印时是“看不见的”

首先将字符串转换为列表:

list(curVal)
或者我个人最喜欢的:

[c for c in curVal]

这些将创建正确显示所有难看字符的列表

为了补充其他答案,解释为什么会出现这种情况:

当您需要实际检查字符串包含的字符时,您不能简单地打印它。许多字符在打印时是“看不见的”

首先将字符串转换为列表:

list(curVal)
或者我个人最喜欢的:

[c for c in curVal]

这些将创建正确显示所有难看字符的列表

curVal
几乎肯定以换行结束。
list(curVal)
显示什么?当您打印字符串时,
\n
字符将产生换行符。尝试
print(repr(curVal))
查看实际存在的问题。不确定代码本身有什么问题(正如@Carcigenicate提到的,
curVal
似乎是罪魁祸首,但至于为什么我不知道),但在任何类型的字符串解析上下文中,
strip()
是您摆脱前导或尾随空格的朋友。您从未向我们展示过
valList
,从中定义了
curVal
。让我猜猜,您是通过
readlines()
从文件句柄获得
varList
?只需
curVal.rstrip()
,然后使用
markupConstant
curVal
将其浓缩,几乎可以肯定地以换行结束。
list(curVal)
显示什么?当您打印字符串时,
\n
字符将产生换行符。尝试
print(repr(curVal))
查看实际存在的问题。不确定代码本身有什么问题(正如@Carcigenicate提到的,
curVal
似乎是罪魁祸首,但至于为什么我不知道),但在任何类型的字符串解析上下文中,
strip()
是您摆脱前导或尾随空格的朋友。您从未向我们展示过
valList
,从中定义了
curVal
。让我猜猜,您是通过
readlines()
从文件句柄获得
varList
?只需
curVal.rstrip()
,然后用
markupConstant
集中它。这就是问题所在,非常感谢。答案的原始信用是@zwer,但我不能接受评论作为答案,所以这样就可以了。注意:但是,从技术上讲,我使用了rstrip()。
strip
rstrip
之间的唯一区别是后者只在字符串的右端去除空白(空格、制表符、换行符),而
strip
将在字符串的两端去除空白。但是,两者都不会从中间的某个地方删除空白——因此您之前对我的评论是在
markupFileName
上运行它,并且没有看到任何更改。这就是问题所在,非常感谢。答案的原始信用是@zwer,但我不能接受评论作为答案,所以这样就可以了。注意:但是,从技术上讲,我使用了rstrip()作为