2017-07-13 12 views
-1

私はPythonでファイルを読み込み、そこから行を取得しています。 しかし、私が得た値を印刷した後、各行の後に末尾に\があることを認識しています。 私はPython strip with \nを見て、その中のすべてを試しましたが、何も後端を削除していません。例えば python3でファイルを読み込んでいるときに末尾にを取り除く方法

0051 \

0052 \

0054 \

0056 \

0057 \

0058 \

\ 210

0059 \

どのようにこれらのスラッシュを取り除くことができますか?ここで

は私が持っているコードは、これまで

for line in f: 
    line = line.replace('\\n', "") 
    line = line.replace('\\n', "") 
    print(line) 

である私も、正規表現

strings = re.findall(r"\S+", f.read()) 

を使用してみましたが、何もこれまで働いていません。

+0

私はline = line.rstrip()を使ってみましたが、最後にはバックスラッシュをつけています。私はライン= line.rstrip()は、後続のスペースを削除すると思います。 –

+2

'line.replace( '\\ n'、" ")'?なぜあなたは、 'n'文字の後ろにあるバックスラッシュだけを取り除こうとしていますか? –

答えて

1

あなたはおそらく、行にあるものが混乱している可能性があります。その結果、私も混乱してしまいます。 '\n'は、repr()(値が正確であることを知りたいときはあなたの友人です)を使用して示されているように、改行文字です。通常、行はその行で終わります(例外はファイルの終わりではありません)。それにはバックスラッシュは含まれていません。バックスラッシュはstring literalエスケープシーケンスの一部です。あなたの置換引数'\\n'には2つの文字、バックスラッシュと文字nが含まれています。これは'\n'と一致しません。改行を削除する最も簡単な方法は、str.rstrip('\n')を使用することです。行の読み取り自体は、改行が1つしかないことを保証し、それは文字列の最後にあります。空白を必要としないので、代わりに引数なしでstrip()を使用することがよくあります。

文字列に実際にバックスラッシュが含まれている場合は、置換、ストリップ、再または他の文字列処理を使用するかどうかにかかわらず、その文字列を処理できます。文字列リテラルレベルだけでなく、regular expressionレベルでもエスケープシーケンスに使用される可能性があることに注意してください。たとえば、re.sub(r'\\$', '', str)は、文字列の最後からバックスラッシュを削除します。バックスラッシュ自体は倍精度化されて正規表現内の特別なシーケンスを意味するのではなく、文字列リテラルはバックスラッシュを2倍にする必要がないためrawです。

+0

改行文字の場合、 'print(line)'はバックスラッシュではなく改行文字を出力します。 'print(repr(line))'のようなものはバックスラッシュに加えて 'n'を出力します。そして、 're.findall(r" \ S + "、f.read())'はうまくいったでしょう。それは本当に単なるバックスラッシュだとかなり確信しています。 –

+0

いずれの場合でも、repr()コールは状況を明確にし、re.subはバックスラッシュであればそのバックスラッシュを選択することができます。 –

+0

私はそれが後にバックスラッシュを具体的に扱うことを意味します。置き換えとは異なり、それは他のバックスラッシュには触れませんし、 '\ n 'だけがあればそれを残します。それはおそらく必要ではありませんが、私は何をする必要があるのか​​不完全な画像を持っています。 –

関連する問題