これが私の問題です。
テキストファイルを読み取ってから、行をフロートに変換しようとしています。テキストファイルには\n
と\t
が含まれていますが、それを取り除く方法はわかりません。
line.strip()
を使用しようとしましたが、うまくいかず、フロートに変換しようとしたときにエラーが発生しました。それからline.strip("\n")
を試しましたが、それでもうまくいきませんでした。テキストファイルから\t
と\n
を取り出すと、プログラムは正常に動作しますが、それらを機能させるための割り当ての一部です。
なぜこれが機能しないのか本当にわかりません。助けてくれてありがとう。
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
を無に置き換えます。
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()])
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は文字列でなければなりません。文字列内の文字は、このメソッドが呼び出される文字列の両端から削除されます。
次を使用できます。
mylist = []
# Assuming that you have loaded data into a lines variable.
for line in lines:
mylist.append(line.strip().split('\t')
すべてのデータ行のフィールド値のみを含むpythonリストを取得します。
タブ文字で区切られたフロートの行を変換しようとしている場合、float(line)
は行全体を1つのフロートに変換しようとしますが、複数ある場合は失敗します。 strip
を使用して先頭および末尾の空白を削除しても、その根本的な問題は解決しません。
多分あなたはsplit
各行を断片に分割し、各断片で何かをする必要がありますか?
pythons csvライブラリはこれに適しています。
http://docs.python.org/library/csv.html
CSV =コンマ区切り値ですが、区切り文字=\tを設定すると、タブ区切り値でも機能します。
多くの場合、行の読み方によっては、mylineから\ nを削除するために、\ nがmylineの最後の文字であるため、myline [:-1]を使用できます。
'\ t'には、replace()またはstrip()を使用できます