2017-06-16 8 views
0

私はPythonコードに問題があります。 2つの文字列オブジェクトの値を連結しようとしていますが、コードを実行すると、2つの文字列の間に '\ 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'

2つの文字列間の\ nを参照してください?私は、個々の文字列を個別に印字することでコードを少し解読しましたが、いずれも独自の\ nを含んでいません。私が間違ってやっていることについてのどんな考えですか?

ありがとうございます!

+2

'curVal'はほぼ間違いなく改行で終わります。 'list(curVal)'は何を表示しますか? – Carcigenicate

+0

文字列を出力すると、 '\ n'文字だけで改行が生成されます。 'print(repr(curVal))'を実行して、実際に何が存在しているのかを確認してください。 – jasonharper

+2

@carcigenicateが述べたように、コード自体から何が問題なのかよく分かりませんが、 'curVal'が原因であるように見えますが、理由は分かりませんが)何らかの文字列解析コンテキストで' strip() '先頭または末尾の空白を取り除くためにあなたの友人です。 – Magsol

答えて

4

連結自体には\nが含まれていません。 valListはおそらくファイルオブジェクト上でreadlines()を呼び出した結果であるため、その中の各要素には末尾が\nとなります。それを使用する前に、各要素に対してstripを呼び出します:\ nは技術的に改行文字であるため、

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

この - ' curVal'、ない完全な 'markupFileName'に私は'ストリップを実行するためのもの – LSFKing

+0

を使用rstrip'後者は空白(スペース、タブ、改行)を取り除くことであるstrip'と ''の唯一の違い*のみ*列の右端に一方、 'strip'は文字列の両方の*端でそれを行います。 markupFileName' 'でそれを実行し、任意の変更を見ていないについて私に、したがって、あなたの以前のコメントを - どちらも、しかし、どこか途中でから空白を取り除くません。 – Magsol

2

理由あなたが実際にPythonの文を印刷するときに\ nを見ていないです。実際に印刷するときには表示されません。新しい行にスキップするだけです。問題は、2つの文字列の真ん中にこれがあると、問題を引き起こすことになります。問題の解決方法はストリップ方式です。ここの文書(https://www.tutorialspoint.com/python/string_strip.htm)を読むことができますが、基本的にこの方法を使用して改行文字を文字列から取り除くことができます。

0

ただ、これを約来た理由を説明する他の回答に加えて作る:あなたが実際にあなたは、単にそれを印刷することはできませんどのような文字列が含まれている、検査する必要がある場合

を。多くの文字が印刷されると「見えない」。

list(curVal) 

するか、私の個人的な好み:

は、最初のリストに文字列を回し

[c for c in curVal] 

これらが適切に文字を見るためにすべてのハードを表示するリストを作成します。

関連する問題