2016-11-01 16 views
-1

私はpythonファイルI/Oを勉強しています。私は簡単なプログラム(main.py)を作った。pythonファイルの読み込み、行ごとの書き込み

私の目標は1行ずつ読み込まれ、1行ずつ書き込まれます。以下

fstream = open("input2.txt", 'r'); 
line = fstream.readline() 
while line: 
    print(line); 
    line = fstream.readline() 

fstream.close() 

input2.txtファイル

start. 
hello world. 
hello python. 
I am studying file I/O in python 
end. 

私はPythonプログラムを実行すると

のpython main.py

はその後、結果は...

であります
start. 

hello world. 

hello python. 

I am studying file I/O in python 

end. 

これは私が期待したものと同じではありません。私のプログラムは、無限ループにdigedしかし

は、だから私はmain.py

fstream = open("input2.txt", 'r'); 
line = fstream.read().split("\n") 
while line: 
print(line); 
line = fstream.read().split("\n") 

fstream.close() 

を変更しました。

picture of infinite loop

は、私が何をすべきか、この問題を解決するには?


私が期待した結果は次のとおりです。

start. 
hello world. 
hello python. 
I am studying file I/O in python 
end. 
+0

'輸入sys'、代わりに' 'print' –

+1

てみ' rstrip() 'のsys.stdout.write'。 –

+0

インデントなしでPythonコードを投稿しないでください。ひどくインデントされたPythonコードはナンセンスです。 – khelwood

答えて

2

印刷機能は自動的に改行文字を追加します。だから、

print msg 

あなたはPythonが末尾に新しい行を印刷したくない場合は、新しい行

が続く可変MSGの内容を印刷します、あなたが最後にカンマを追加する必要があります。これは、末尾改行なしでmsgを出力します。そして、もしmsgがファイルから新しい行を読み込むときに新しい行をすでに持っているならば、二重の新しい行の代わりに一つの新しい行が表示されます。

print msg, 

printが関数として呼び出されるpython 3を使用している場合は、end引数を指定できます。あなたが明示的にクローズする必要がないように、ファイルを開くためにwithステートメントを使用し、すべてのhttps://docs.python.org/3/library/functions.html#print

print(msg, end = '') 
0

ファーストを参照してください。次に、whileループを使用しないでください。ファイルを直接反復処理することができます。第三に、あなたは(だけ末尾の改行を削除するか、rstrip('\n'))読んラインから任意の末尾の空白を削除するためにrstripメソッドを使用します。

with open("input2.txt", 'r') as fstream: 
    for line in fstream: 
     line = line.rstrip('\n') 
     print(line) 
0

上記の回答に加えて、あなたも使うことができます。分割線は、()

fstream = open("input2.txt", 'r'); 
line = fstream.readline().splitlines() 
while line: 
    print(line[0]); 
    line = fstream.readline().splitlines() 

fstream.close() 
関連する問題