web-dev-qa-db-ja.com

Python strip with \ n

これが私の問題です。

テキストファイルを読み取ってから、行をフロートに変換しようとしています。テキストファイルには\n\tが含まれていますが、それを取り除く方法はわかりません。

line.strip()を使用しようとしましたが、うまくいかず、フロートに変換しようとしたときにエラーが発生しました。それからline.strip("\n")を試しましたが、それでもうまくいきませんでした。テキストファイルから\t\nを取り出すと、プログラムは正常に動作しますが、それらを機能させるための割り当ての一部です。

なぜこれが機能しないのか本当にわかりません。助けてくれてありがとう。

54
Mallard Duck

line.strip('\n')およびline.strip('\t')を使用できるはずです。しかし、これらはline変数を変更しません... \n\tを取り除いた文字列を返すだけです。だからあなたは次のようなことをしなければなりません

line = line.strip('\n')
line = line.strip('\t')

これは、最初と最後から削除するために機能するはずです。文字列の中央に\n\tがある場合は、次を実行する必要があります。

line = line.replace('\n','')
line = line.replace('\t','')

\n\tを無に置き換えます。

104
austin1howard

strip()メソッドはデフォルトで空白を削除するので、 '\ t'や '\ n'などのパラメーターで空白を呼び出す必要はありません。ただし、Pythonの文字列は不変であり、変更できません。つまり、line.strip()呼び出しはlineオブジェクトを変更しません。結果は、呼び出しによって返される新しい文字列です。

既に述べたように、入力ファイルから例を投稿すると役立ちます。各行に複数の数字がある場合、strip()は使用する関数ではありません。代わりに、文字列メソッドでもあるsplit()を使用する必要があります。

結論として、各行に空白で区切られた複数のフロートが含まれていて、すべての数値のリストを作成すると仮定すると、次を試すことができます。

floats = []
with open(filename) as f:
    for line in f:
        floats.extend([float(number) for number in line.split()])
23
Dan Gerhardsson

python regex パターンを使用してはどうですか?

import re
f = open('test.txt', 'r')
strings = re.findall(r"\S+", f.read())

また、 line.strip() の場合、Pythonは先頭と末尾の文字のみを削除するため機能しません

From Python Docs -先頭と末尾の文字を削除した文字列のコピーを返します。 charsが省略されるかNoneの場合、空白文字は削除されます。 Noneではなく指定された場合、charsは文字列でなければなりません。文字列内の文字は、このメソッドが呼び出される文字列の両端から削除されます。

5
sransara

次を使用できます。

mylist = []
# Assuming that you have loaded data into a lines variable. 
for line in lines:
    mylist.append(line.strip().split('\t')

すべてのデータ行のフィールド値のみを含むpythonリストを取得します。

4
Jobel

タブ文字で区切られたフロートの行を変換しようとしている場合、float(line)は行全体を1つのフロートに変換しようとしますが、複数ある場合は失敗します。 stripを使用して先頭および末尾の空白を削除しても、その根本的な問題は解決しません。

多分あなたはsplit各行を断片に分割し、各断片で何かをする必要がありますか?

1
Ben

pythons csvライブラリはこれに適しています。

http://docs.python.org/library/csv.html

CSV =コンマ区切り値ですが、区切り文字=\tを設定すると、タブ区切り値でも機能します。

1
robert king

多くの場合、行の読み方によっては、mylineから\ nを削除するために、\ nがmylineの最後の文字であるため、myline [:-1]を使用できます。

'\ t'には、replace()またはstrip()を使用できます

1
jimifiki