2017-06-16 36 views
0

我一直在使用我的Python代码。我试图连接两个字符串对象的值,但是当我运行代码时,它会一直在两个字符串之间打印'\ n'。 我的代码:Python - n出现在连接字符串中

while i < len(valList): 
    curVal = valList[i] 
    print(curVal) 
    markupConstant = 'markup.txt' 
    markupFileName = curVal + markupConstant 
    markupFile = open(markupFileName) 

现在,当我运行它,它给了我这个错误:

OSError: [Errno 22] Invalid argument: 'cornWhiteTrimmed\nmarkup.txt'

见两个字符串之间的\ n吗?我已经通过单独打印每个字符串来解剖代码,并且它们都不包含\ n。任何想法,我做错了什么?

在此先感谢!

+2

'curVal'几乎肯定以换行符结束。 'list(curVal)'显示什么? – Carcigenicate

+0

当你打印一个字符串时,一个'\ n'字符就会产生一个换行符。尝试'print(repr(curVal))'看看实际上有什么。 – jasonharper

+2

不知道问题来自代码本身(如@Carcigenicate提到的,'curVal'似乎是罪魁祸首,但至于为什么我不知道),但在任何类型的字符串解析上下文中,strip()是你的朋友摆脱领先或尾随空白。 – Magsol

回答

4

连接本身并不会添加\nvalList可能是在文件对象上调用readlines()的结果,因此它中的每个元素都将有一个尾部\n。使用它之前调用每个元素strip

while i < len(valList): 
    curVal = valList[i].strip() 
    print(curVal) 
    markupConstant = 'markup.txt' 
    markupFileName = curVal + markupConstant 
    markupFile = open(markupFileName) 
+0

This是问题,非常感谢你。一个答案的原始信用归咎于@zwer,但我不能接受评论作为答案,所以这会做。 注:然而,从技术上讲,我使用了rstrip() – LSFKing

+0

'strip'和'rstrip'的唯一区别在于后者会在字符串的右端去掉空格(空格,制表符,换行符)* only * ,而'strip'会在字符串的*两端执行。但是,它们都不会从中间的任何地方去除空白 - 因此您之前对我在'markupFileName'上运行它并且没有看到任何更改发表评论。 – Magsol

2

你没有看到\ n当你真正打印出来的Python语句的原因是因为\ n是技术上的换行符。当你实际打印时你不会看到这个,它只会跳到一个新的行。问题在于,当你在两个字符串中间出现这个问题时,会导致问题。解决您的问题是剥离方法。您可以在这里阅读它的文档(https://www.tutorialspoint.com/python/string_strip.htm),但基本上可以使用此方法从任何字符串中去除换行符。

0

只是为了让一个除了其他的答案,解释为什么这是约:

当你需要实际检查字符串中包含什么字符,你不能简单地打印出来。许多字符在打印时是“不可见的”。

打开串入一个列表第一:

list(curVal) 

还是我个人最喜欢的:

[c for c in curVal] 

这将创建列表可正常显示所有很难看到的字符。