改行やスペースを入れずに印刷するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/493386

  •  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().

情報源

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print

他のヒント

これは、グイド・ヴァンロッサムによって、このリンクで説明するような単純なする必要があります:

日時:?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+"."),

これは改行やスペースを削除します(^ _ ^)*

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top