改行やスペースを入れずに印刷するにはどうすればよいですか?
-
20-08-2019 - |
質問
質問はタイトルにあります。
C の場合:
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i++) printf(".");
return 0;
}
出力:
..........
Python の場合:
>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .
Pythonで print
を追加します \n
またはスペース、どうすればそれを回避できますか?これはほんの一例です。最初に文字列を構築してからそれを出力できるとは言わないでください。文字列を「追加」する方法を知りたい stdout
.
解決
一般的な方法
import sys
sys.stdout.write('.')
電話する必要がある場合もあります
sys.stdout.flush()
確実にする stdout
すぐに洗い流されます。
Python 2.6以降
Python 2.6 からは、 print
Python 3 の関数:
from __future__ import print_function
これにより、以下の Python 3 ソリューションを使用できるようになります。
パイソン3
Python 3 では、 print
ステートメントが関数に変更されました。Python 3 では、代わりに次のことができます。
print('.', end='')
これは、Python 2 でも機能します。 from __future__ import print_function
.
バッファリングに問題がある場合は、以下を追加することで出力をフラッシュできます。 flush=True
キーワード引数:
print('.', end='', flush=True)
ただし、次のことに注意してください。 flush
キーワードはのバージョンでは使用できません print
からインポートされた関数 __future__
Python 2 で;Python 3、具体的には 3.3 以降でのみ動作します。以前のバージョンでは、次の呼び出しを行って手動でフラッシュする必要があります。 sys.stdout.flush()
.
情報源
他のヒント
これは、グイド・ヴァンロッサムによって、このリンクで説明するような単純なする必要があります:
日時:?C / Rせずに一つの印刷を行う方法
http://legacy.python.org/search/hypermail/ python-1992 / 0115.htmlする
これは何かを印刷することが可能であるが、自動的に持っていません キャリッジリターンが追加?
はい、印刷するための最後の引数の後にコンマを追加します。例えば、 このループは、スペースで区切られたライン上の番号0..9を印刷します。注意 最後の改行を追加パラメータなし「印刷」ます:
>>> for i in range(10):
... print i,
... else:
... print
...
0 1 2 3 4 5 6 7 8 9
>>>
注: "?pythonでのprintfする方法" のようなものにするために使用この質問のタイトルの
は、人々がタイトルに基づいて、それを探してここに来たことがあるので、Pythonはまた、printfスタイルの置換をサポートしています:
>>> strings = [ "one", "two", "three" ]
>>>
>>> for i in xrange(3):
... print "Item %d: %s" % (i, strings[i])
...
Item 0: one
Item 1: two
Item 2: three
そして、あなたは手近に文字列値を掛けることができます:
>>> print "." * 10
..........
のpython2.6 +のためのpython3スタイルの印刷機能を使用してください。の(また、同じファイル内の既存のキーワードとしてprint文を中断します。)の
# for python2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
print('.', end='')
別の
printf.py
ファイルを作成し、すべてのあなたのpython2印刷キーワードを台無しにしないようにするに
# printf.py
from __future__ import print_function
def printf(str, *args):
print(str % args, end='')
次に、あなたのファイルにそれを使用する
from printf import printf
for x in xrange(10):
printf('.')
print 'done'
#..........done
printfのスタイルを示すより多くの例
printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
同じ行に印刷する方法:
import sys
for i in xrange(0,10):
sys.stdout.write(".")
sys.stdout.flush()
(Pythonの3.0のような)新しいprint
機能を使用すると、終了文字を変更できますオプションのend
パラメータを持っています。セパレータとしてsep
もあります。
printf関数と呼ばれる新しい機能を作成するために、functools.partialを使用した
>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")
Hello world
デフォルトのパラメータを持つ関数をラップする簡単な方法。
あなただけの,
関数の最後にprint
を追加することができます。
あなたは試すことができます:
import sys
import time
# Keeps the initial message in buffer.
sys.stdout.write("\rfoobar bar black sheep")
sys.stdout.flush()
# Wait 2 seconds
time.sleep(2)
# Replace the message with a new one.
sys.stdout.write("\r"+'hahahahaaa ')
sys.stdout.flush()
# Finalize the new message by printing a return carriage.
sys.stdout.write('\n')
のPython 3では、印刷機能です。お問い合わせの際
print ('hello world')
Pythonはそれを変換します。
print ('hello world', end = '\n')
あなたが好きに終止符を変更することができます。
print ('hello world', end = '')
print ('hello world', end = ' ')
パイソン 2.6+:
from __future__ import print_function # needs to be first statement in file
print('.', end='')
パイソン 3:
print('.', end='')
パイソン <= 2.5:
import sys
sys.stdout.write('.')
Python 2で、各印刷後に余分なスペースがあっても問題ない場合
print '.',
誤解を招く Python 2で - 避ける:
print('.'), # avoid this if you want to remain sane
# this makes it look like print is a function but it is not
# this is the `,` creating a tuple and the parentheses enclose an expression
# to see the problem, try:
print('.', 'x'), # this will print `('.', 'x') `
私は最近、同じ問題を抱えていた..
私はやってそれを解決します:
import sys, os
# reopen stdout with "newline=None".
# in this mode,
# input: accepts any newline character, outputs as '\n'
# output: '\n' converts to os.linesep
sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None)
for i in range(1,10):
print(i)
これは、UNIXとWindowsの両方で動作します...それをテストしていません MacOSXの上...
HTH
次のようにあなたがのpython3で同じことを行うことができます:
#!usr/bin/python
i = 0
while i<10 :
print('.',end='')
i = i+1
とpython filename.py
またはpython3 filename.py
でそれを実行します。
あなたは上記のすべての答えが正しいことがわかります。しかし、私はショートカットが常に最後に「終了= 『』」パラメータを書くために作りたかっます。
あなたのような機能を定義することができます。
def Print(*args,sep='',end='',file=None,flush=False):
print(*args,sep=sep,end=end,file=file,flush=flush)
これは、すべてのパラメータ数を受け入れるだろう。でも、それはなどのファイル、フラッシュなどと同じ名前を持つ他のすべてのパラメーターを受け入れます。
@lenooh私のクエリを満たしました。 「Pythonの抑制改行」を探しながら、私はこの記事を発見しました。私はPuTTYのためのPython 3.2を開発するためにラズベリーパイにIDLE3を使用しています。私はPuTTYのコマンドライン上のプログレスバーを作成したいです。私は、ページが離れてスクロールしたくありませんでした。 、「は私を残して嘆願として、私は大丈夫やっている - 私は、プログラムが停止するcruncxedしていないにも陽気無限ループに昼食に送信されていることを怖がらから再保証するユーザーに対して水平な線を望んでいましたこれは、いくつかの時間がかかることがあります。」対話型のメッセージ - 。テキスト中のプログレスバーのような
print('Skimming for', search_string, '\b! .001', end='')
は「001」を拭き取ると期間のラインを拡張する、よう⌫⌫⌫ラブアウト3つのバックスペースを印刷する次の画面書き込み、その後、周期のために準備して、メッセージを初期化します。 search_string
オウムのユーザの入力した後、\b!
は適切に句読点を置く、それ以外の力をsearch_string
スペースを超えるバックアップする私のprint()
テキストの感嘆符をトリミング。それは宇宙と私はシミュレートしてる「プログレスバー」の最初の「ドット」が続いています。必要以上に、メッセージは、その後進展が処理されていること、そしてまた、我々は、後に出て構築する期間の数を反映しているユーザーからの通知を取るために(先行ゼロと3の長さにフォーマットされた)ページ数でプライミングされます右ます。
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
# some stuff…
# search, scrub, and build bulk output list[], count items,
# set done flag True
page=page+1 #done flag set in 'some_stuff'
sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('\nSorting', item_count, 'items')
page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
print(list[item_count])
#print footers here
if not (len(list)==items):
print('#error_handler')
プログレスバーの肉はsys.stdout.write('\b\b\b.'+format(page, '03'))
ラインです。まず、左に消去し、それはよう⌫⌫⌫ラブアウト「\ bは\ bは\のB」と3桁の数字の上にカーソルをバックアップし、プログレスバーの長さに追加する新しい時代を削除します。そして、それは、これまでに進行したページの3桁の数字を書き込みます。 sys.stdout.write()
を閉じるには、フルバッファまたは出力チャンネルを待っているので、sys.stdout.flush()
は即時書き込みを強制します。 sys.stdout.flush()
はprint()
でバイパスさprint(txt, end='' )
の終わりに組み込まれています。それは、3桁の数字をバックワイプ期間を追加し、再び3桁の数字を書くためにここに戻るまで、それはインクリメント、より多くの何も印刷しないながらコードは、その平凡な時間のかかる操作をループします。
3桁は拭き、書き換えは決して必要がある - それはsys.stdout.write()
対print()
を例示しているだけの繁栄です。あなたはピリオドと同じように簡単にプライムができ、ちょうど介して1ずつ長くバーを印刷して3空想バックスラッシュ-B⌫バックスペースを(もちろんフォーマット済み書いていないページが同様にカウント)を忘れて - ちょうど使用して、スペースや改行なしsys.stdout.write('.'); sys.stdout.flush()
ペアます。
の代わり画分の見かけのリストを作成し、ラズベリーパイIDLE3のPythonシェルとして⌫ラブアウトバックスペースを尊重するが、代わりにスペースを出力しないことに注意してください。
- (O = 8>ウィズ
あなたは、ループ、右のために何かを印刷したい。しかし、あなたはそれが新しい行に毎回印刷したくありません... 例えばます:
for i in range (0,5):
print "hi"
OUTPUT:
hi
hi
hi
hi
hi
<時間>
しかし、あなたはそれがこのように印刷したいです: 右こんにちはこんにちはこんにちはこんにちはこんにちはこんにちは???? ただ「こんにちは」、印刷後にコンマを追加します。
例:
for i in range (0,5):
print "hi",
OUTPUT:
hi hi hi hi hi
これらの答えの多くは、少し複雑に思えます。 Pythonの3.Xでは、単にこれを行うには、
print(<expr>, <expr>, ..., <expr>, end=" ")
最後のデフォルト値は「\ n」です。私たちは、単にスペースにそれを変更しているか、また、エンド=「」を使用することができます。
for i in xrange(0,10): print '\b.',
これは、両方の2.7.8および2.5.2(それぞれ、キャノピーとOSX端末)で働いていた - ないモジュールをインポートまたはタイムトラベル必要
などの機能を持っています:
def Print(s):
return sys.stdout.write(str(s))
それから、今ます:
for i in range(10): # or `xrange` for python 2 version
Print(i)
を出力します:
0123456789
これを行うには一般に 2 つの方法があります。
Python 3.x で改行なしで印刷する
print ステートメントの後に何も追加せず、次を使用して '
' を削除します。 end=''
として:
>>> print('hello')
hello # appending '\n' automatically
>>> print('world')
world # with previous '\n' world comes down
# solution is:
>>> print('hello', end='');print(' world'); # end with anything like end='-' or end=" " but not '\n'
hello world # it seem correct output
ループ内の別の例:
for i in range(1,10):
print(i, end='.')
Python 2.x で改行なしで印刷する
末尾にカンマを追加すると、印刷後に無視されることが示されます \n
.
>>> print "hello",; print" world"
hello world
ループ内の別の例:
for i in range(1,10):
print "{} .".format(i),
これがお役に立てば幸いです。こちらを訪問できます リンク .
...あなたは、任意のライブラリをインポートする必要はありません。ただ、削除文字を使用します:
BS=u'\0008' # the unicode for "delete" character
for i in range(10):print(BS+"."),
これは改行やスペースを削除します(^ _ ^)*