テキストファイルを文字列変数に読み込み、改行を取り除く方法は?


964

次のコードセグメントを使用して、Pythonでファイルを読み取ります。

with open ("data.txt", "r") as myfile:
    data=myfile.readlines()

入力ファイルは:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

データを印刷すると、

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

私が見るように、データはlist形になっています。どうすれば文字列にできますか?そして、また、どのように私は削除しない"\n""[""]"それから文字を?



7
タイトルと質問に一貫性がありません。本当に\ nも削除しますか?
ジュリアン

2
本当にファイル/文字列の内容から改行を削除しますか、それとも印刷出力の多くのメタ文字について混乱していて、実際には改行を保持したいが、それらを「\ n」として表示させませんか?
mnagel

11
検索エンジンからここに来る人にとっては、おそらく@xiaoyuの答えを探しているでしょう
ジョナサン・スディアマン

回答:


1321

あなたは使うことができます:

with open('data.txt', 'r') as file:
    data = file.read().replace('\n', '')

66
open("data.txt").read().replace('\n','')代わりに書くだけの欠点はありますか?
tuomassalo 2013年

262
はい、あなたのバージョンはファイルを明示的に閉じません。それはガベージコレクタが実行されるかプログラムが終了するまでそれは遅れます。「with」ステートメントは通常、いくつかのセットアップ/ティアダウンの開閉アクションをカプセル化します。
sleeplessnerd

12
説明をありがとう。だから、私のバージョンは小さなスクリプトでは問題ないようです-しかし、OTOHそれを習慣にしないために、できれば完全に避けるべきです。
tuomassalo 2013年

10
@tuomassaloこれは、テスト/デバッグプロセスの巨大なPITAです。これは、途中で終了する必要がある場合や例外が発生した場合に、開いているファイルハンドルをクリーンアップしないためです。
GoingTharn 2013年

13
いいえ、rstrip('\n')最後の行から改行のみを削除し、replace('\n','')すべての場所で削除します(基本的に、ファイル全体を1行にします)
sleeplessnerd

632

read()ではなくを使用readline()

with open('data.txt', 'r') as myfile:
  data = myfile.read()

6
多分、しかしそれはOPが望んだように改行を取り除きません。私はまだそれが好きです。
Randall Cook、

60
単一の文字列を返す場合、改行を削除しても意味がありません。OPはリスト内の文字列から1つの文字列を選択するか、\ n削除する必要があります。
Alex Dupuy 2014年

機能しますが、Unicodeファイルは機能しません。python3でutf8をサポートするには、追加の引数を使用しますencoding="utf-8"
FindOutIslamNow

2
このソリューションが投稿された理由がわかりません。また、非常に多くの賛成票を得ています。これは基本的に1年以上前に受け入れられたものと同じで、新しい行の
削除

65

ファイルから1行で読み取ることができます。

str = open('very_Important.txt', 'r').read()

これはファイルを明示的に閉じないことに注意してください。

CPythonは、ガベージコレクションの一部として終了すると、ファイルを閉じます。

しかし、他のpython実装はそうしません。移植可能なコードを作成するにはwith、ファイルを明示的に使用または閉じることをお勧めします。ショートは常に良いとは限りません。https://stackoverflow.com/a/7396043/362951を参照してください


32
これは慣用句であり、推奨されません。ステートメントopen内で使用する必要がありますwith ... as
ホルヘレイタオ2017年

1
@JCは問題を説明できますか?これは単なる慣習の問題with ... asですか、それともこの陳述は何かをもたらしますか?
Titou

4
@Titou問題は、open.read()がファイルを閉じないことです。そのため、必要になるwith ... asstr.close()、Pedroの回答に示されています。ここで
JBallin

@JBallin。このイディオムは明らかにエラーの原因を取り除きます。よろしくお願いします!
-Titou

3
あなただけの影にきたので、これも悪いですstr()組み込みコマンドから
Chris_Rands

50

すべての行を文字列に結合して新しい行を削除するには、通常は次のように使用します。

with open('t.txt') as f:
  s = " ".join([x.strip() for x in f]) 

これは、この参照してください私のコードでUnicodeDecodeErrorを与えているstackoverflow.com/q/18649512/9339242
Arayanシン

文字エンコーディングを指定する必要があるかもしれません。
CONvid19

45

Python 3.5以降では、pathlibを使用してテキストファイルの内容を変数にコピーし、ファイルを1行で閉じることができます

from pathlib import Path
txt = Path('data.txt').read_text()

次に、str.replaceを使用して改行を削除できます。

txt = txt.replace('\n', '')

31
with open("data.txt") as myfile:
    data="".join(line.rstrip() for line in myfile)

join()は文字列のリストを結合し、引数なしのrstrip()は、文字列の末尾から改行を含む空白を削除します。


12

これはread()メソッドを使用して行うことができます:

text_as_string = open('Your_Text_File.txt', 'r').read()

または、デフォルトのモード自体が「r」(読み取り)なので、単純に使用します。

text_as_string = open('Your_Text_File.txt').read()

9

私はしばらくこれをいじっていてread、と組み合わせて使用することを好みrstripます。がないrstrip("\n")場合、Pythonは文字列の末尾に改行を追加します。これはほとんどの場合、あまり役に立ちません。

with open("myfile.txt") as f:
    file_content = f.read().rstrip("\n")
    print file_content

6

あなたが何をしているのか正確に言うのは難しいですが、次のようなものがあなたを始めるでしょう:

with open ("data.txt", "r") as myfile:
    data = ' '.join([line.replace('\n', '') for line in myfile.readlines()])

reduce(lambda x、y:x + y.rstrip( '\ n')、['a \ n'、 "b \ n"、 'c']、 "")はもっとクールです:D
sleeplessnerd

3
@ダンカンあなたは何を提案しますか?
Chris Eberle 2011

data = ' '.join(line.replace('\n', '') for line in myfile)またはMagerValpのバージョン。
ダンカン

6

誰もsplitlines()まだ言及していないことに驚いています。

with open ("data.txt", "r") as myfile:
    data = myfile.read().splitlines()

変数dataは、印刷すると次のようなリストになります。

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

改行がないことに注意してください(\n)。

その時点で、コンソールに行を出力したいようですが、これはforループで実現できます。

for line in data:
    print line

4

各行を取り除いて、最終的な文字列に連結することもできます。

myfile = open("data.txt","r")
data = ""
lines = myfile.readlines()
for line in lines:
    data = data + line.strip();

これもうまくいきます。


ペドロありがとう。理解のために追加しました。
サイキリティバダム

3

これを1行から2行のコードに圧縮できます!!!

content = open('filepath','r').read().replace('\n',' ')
print(content)

あなたのファイルが:

hello how are you?
who are you?
blank blank

Python出力

hello how are you? who are you? blank blank

3

これは、ファイルオブジェクトも閉じる1行のコピー/貼り付け可能なソリューションです。

_ = open('data.txt', 'r'); data = _.read(); _.close()

2
f = open('data.txt','r')
string = ""
while 1:
    line = f.readline()
    if not line:break
    string += line

f.close()


print string

2
ループはstring += line避けてください。Pythonの一部のバージョンでは、ここではO(n ^ 2)の動作を回避できますが、他のどの回答もこれよりも優れています。また、要求された改行を削除しなかったため、コードは非常に遅い方法ですstring = f.read()
Duncan

訂正してくれてありがとう。しかし、小さなことの1つは、新しい行を削除する必要がないことです。テストしたところ、「\ n」が出力されなかったためです。@Duncan
hungneox

2

python3:角かっこ構文が初めての場合は、Googleの「リストコンプレッション」。

 with open('data.txt') as f:
     lines = [ line.strip( ) for line in list(f) ]


1

質問の[]の部分について誰かが回答したとは思わない。各行を変数に読み込むと、\ nを ''で置き換える前に複数の行があったため、リストを作成してしまいました。xの変数があり、それを出力する場合

バツ

またはprint(x)

またはstr(x)

括弧付きのリスト全体が表示されます。(並べ替えの配列)の各要素を呼び出す場合

x [0]の場合、角かっこは省略されます。str()関数を使用すると、データだけが表示され、 ''も表示されません。str(x [0])


1

多分これを試すことができますか?私はこれを私のプログラムで使用しています。

Data= open ('data.txt', 'r')
data = Data.readlines()
for i in range(len(data)):
    data[i] = data[i].strip()+ ' '
data = ''.join(data).strip()

1

正規表現も機能します:

import re
with open("depression.txt") as f:
     l = re.split(' ', re.sub('\n',' ', f.read()))[:-1]

print (l)

['I'、 'feel'、 'empty'、 'and'、 'dead'、 'inside']


1

Pythonを使用して改行を削除するにreplaceは、文字列の関数を使用できます。

この例では、3種類の改行をすべて削除します。

my_string = open('lala.json').read()
print(my_string)

my_string = my_string.replace("\r","").replace("\n","")
print(my_string)

ファイルの例は次のとおりです。

{
  "lala": "lulu",
  "foo": "bar"
}

次の再生シナリオを使用して試してみることができます。

https://repl.it/repls/AnnualJointHardware

ここに画像の説明を入力してください


0

これは機能します:ファイルを次のように変更します:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

次に:

file = open("file.txt")
line = file.read()
words = line.split()

これにより、次wordsと等しいという名前のリストが作成されます。

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

「\ n」は取り除かれました。括弧が邪魔になる部分に答えるには、次のようにします。

for word in words: # Assuming words is the list above
    print word # Prints each word in file on a different line

または:

print words[0] + ",", words[1] # Note that the "+" symbol indicates no spaces
#The comma not in parentheses indicates a space

これは次を返します:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

1
ファイルの変更は1回限りの状況で機能する可能性がありますが、何百ものファイルがある場合、これは実行可能なソリューションではありません。
Craicerjack 2017

0
with open(player_name, 'r') as myfile:
 data=myfile.readline()
 list=data.split(" ")
 word=list[0]

このコードは、最初の行を読み取るのに役立ちます。次に、リストと分割オプションを使用して、スペースで区切られた最初の行の単語をリストに格納するように変換できます。

より簡単に任意の単語にアクセスしたり、文字列に格納したりすることもできます。

forループを使用しても同じことができます。


0
file = open("myfile.txt", "r")
lines = file.readlines()
str = ''                                     #string declaration

for i in range(len(lines)):
    str += lines[i].rstrip('\n') + ' '

print str

-1

以下を試してください:

with open('data.txt', 'r') as myfile:
    data = myfile.read()

    sentences = data.split('\\n')
    for sentence in sentences:
        print(sentence)

注意:は削除されません\n。あたかもないかのようにテキストを見るためです\n

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.