web-dev-qa-db-ja.com

.readlines()を使用するときに\ nを取り除きます

値が入った.txtファイルがあります。

値は以下のようにリストされています。

Value1
Value2
Value3
Value4

私の目標は値をリストに入れることです。そうすると、リストは次のようになります。

['Value1\n', 'Value2\n', ...]

\nは必要ありません。

これが私のコードです:

t = open('filename.txt', 'r+w')
contents = t.readline()

alist = []

for i in contents:
    alist.append(i)
190
TDNS

これはあなたが望むことをするはずです(リスト内のファイルの内容、行単位、\ nなし)

with open(filename) as f:
    mylist = f.read().splitlines() 
248
user3131651

私はこれをやる:

alist = [line.rstrip() for line in open('filename.txt')]

または

with open('filename.txt') as f:
    alist = [line.rstrip() for line in f]
103
hughdbrown

.rstrip('\n') からonlyまでの文字列の最後から改行を削除することができます。

for i in contents:
    alist.append(i.rstrip('\n'))

これにより、他のすべての空白はそのまま残ります。行頭と行末の空白を気にしないのなら、大きな重いハンマーは .strip() と呼ばれます。

しかし、ファイルから読み込んでいて、すべてをメモリに引き込んでいるので、とにかくなので、 str.splitlines()メソッド を使うのが良いでしょう。これは1つの文字列を行区切り文字で分割し、それらの区切り文字なしで行のリストを返します。これをfile.read()の結果に使用し、file.readlines()を使用しないでください。

alist = t.read().splitlines()
82
Martijn Pieters

リストの各文字列に対して、文字列の先頭または末尾から空白を削除する.strip()を使用します。

for i in contents:
    alist.append(i.strip())

しかし、ユースケースによっては、ファイルから読み込むデータのNice配列が必要な場合はnumpy.loadtxt、さらにはnumpy.genfromtxtのようなものを使用することをお勧めします。

10
askewchan

ファイルを開いた後、リスト内包表記はこれを1行で実行できます。

fh=open('filename')
newlist = [line.rstrip() for line in fh.readlines()]
fh.close()

あとでファイルを閉じるのを忘れないでください。

10
Lisle
from string import rstrip

with open('bvc.txt') as f:
    alist = map(rstrip, f)

注意:rstrip()は空白を削除します。つまり、\f\n\r\t\v\x、および空白です。
しかし、重要なキャラクターを並べることだけに興味があると思います。そうすると、単なるmap(strip, f)がうまくフィットし、見出しの空白も削除されます。


NLの\n記号とRF \r記号だけを本当に削除したい場合は、次のようにします。

with open('bvc.txt') as f:
    alist = f.read().splitlines()

引数なしでsplitlines()を実行すると、NLとRF記号は保持されません(Windowsでは、少なくとも行末にNLRFを含むファイルが記録されます)。タブ.

with open('bvc.txt') as f:
    alist = f.read().splitlines(True)

と同じ効果があります

with open('bvc.txt') as f:
    alist = f.readlines()

つまり、NLとRFは保持されます。

9
eyquem

私は同じ問題を抱えていました、そして、私は以下の解決策が非常に効率的であるとわかりました。私はそれがあなたや同じことをしたいと思っている他のすべての人に役立つことを願っています。

まず第一に、私はそれがファイルの適切なオープン/クローズを確実にするので "with"ステートメントで始めるでしょう。

これは次のようになります。

with open("filename.txt", "r+") as f:
    contents = [x.strip() for x in f.readlines()]

これらの文字列(コンテンツリストのすべての項目は文字列)を整数または浮動小数点数に変換したい場合は、次のようにします。

contents = [float(contents[i]) for i in range(len(contents))]

整数に変換したい場合はintの代わりにfloatを使用してください。

これが私の最初の回答です。正しいフォーマットではない場合はごめんなさい。

4
geo1230

分割行は4ギガバイトのファイルでメモリエラーを投げていたので私は改行文字を取り除くためにstrip関数を使用しました。

サンプルコード

with open('C:\\aapl.csv','r') as Apple:
    for apps in Apple.readlines():
        print(apps.strip())
3
Yogamurthy

私は最近ファイルからすべての行を読むためにこれを使いました:

alist = open('maze.txt').read().split()

あるいは、安全性をさらに高めるためにこれを使用することもできます。

with f as open('maze.txt'):
    alist = f.read().split()

1行のテキストの間にある空白の間には機能しませんが、サンプルファイルでは空白を値の区切りにしていないように見えます。これは簡単な解決策であり、正確な値のリストを返し、空の文字列を追加しません。空の行ごとに''(ファイルの最後の改行など)。

1
micsthepick
with open('D:\\file.txt', 'r') as f1:
    lines = f1.readlines()
lines = [s[:-1] for s in lines]
0
jperezmartin