python - ملف - كيفية الطباعة بدون سطر جديد أو مساحة؟




كيفية الطباعة من النت (18)

الطريق العام

import sys
sys.stdout.write('.')

قد تحتاج أيضا إلى الاتصال

sys.stdout.flush()

لضمان يتم مسح stdout على الفور.

بيثون 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 keyword flush=True :

print('.', end='', flush=True)

السؤال هو في العنوان.

أود أن أفعل ذلك في python . ما أود القيام به في هذا المثال في c :

#include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

انتاج:

..........

في بايثون:

>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .

في Python ، ستتم إضافة \n أو مسافة ، كيف يمكنني تجنب ذلك؟ الآن ، إنه مجرد مثال. لا تقل لي أنني أستطيع أولاً إنشاء سلسلة ثم طباعتها. أود أن أعرف كيفية "إلحاق" سلاسل ل stdout .


... لا تحتاج إلى استيراد أي مكتبة. ما عليك سوى استخدام حرف الحذف:

BS=u'\0008' # the unicode for "delete" character
for i in range(10):print(BS+"."),

هذا يزيل السطر الجديد والمساحة (^ _ ^) *


python 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 '.',

مضللة في بيثون 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') `

إذا كنت تريد طباعة شيء ما في حلقة مباشرة ، ولكنك لا تريد أن تطبعه في سطر جديد في كل مرة .. على سبيل المثال:

 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


استخدم وظيفة الطباعة بنمط python3 لـ python2.6 + (سوف يؤدي أيضًا إلى كسر أي عبارات طباعة موجودة في نفس الملف.)

# for python2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
    print('.', end='')

لكي لا تدمر كل كلماتك الرئيسية المطبوعة في python2 ، قم بإنشاء ملف printf.py منفصل

# 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

العديد من هذه الإجابات تبدو معقدة بعض الشيء. في Python 3.X ، يمكنك القيام بذلك ببساطة ،

print(<expr>, <expr>, ..., <expr>, end=" ")

القيمة الافتراضية للنهاية هي "\ n". نحن ببساطة نغيرها إلى مساحة أو يمكنك أيضًا استخدام النهاية = "".


تشتمل وظيفة print الجديدة (اعتبارًا من Python 3.0) على معلمة اختيارية اختيارية تتيح لك تعديل الحرف الختامي. هناك أيضا sep للفاصل.


ستلاحظ أن جميع الإجابات المذكورة أعلاه صحيحة. ولكني أردت إنشاء اختصار دائمًا لكتابة المعلمة "end = '" في النهاية.

يمكنك تحديد وظيفة مثل

def Print(*args,sep='',end='',file=None,flush=False):
    print(*args,sep=sep,end=end,file=file,flush=flush)

سيقبل كل عدد من المعلمات. حتى أنها سوف تقبل جميع المعلمات الأخرى مثل الملف ، دافق ، وغيرها ، وبنفس الاسم.


كنت مؤخرا نفس المشكلة ..

أنا حلها عن طريق القيام:

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)

هذا يعمل على حد سواء يونيكس ونوافذ ... لم تختبر على macosx ...

هته


ما أفهمه هو أن الفاصلة قمعت الفضاء. النقاط الثلاثة هي آثار للمترجم

لأني في النطاق (0،10): print ". \ n"، .... . . . . . . . . .


هذه ليست الإجابة على السؤال في العنوان ، ولكنها الإجابة على كيفية الطباعة على نفس السطر:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()

وظيفة print في بيثون يولد تلقائيا خط جديد. بامكانك ان تحاول:

print("Hello World", end="")


يمكنك أن تفعل الشيء نفسه في python3 على النحو التالي:

#!usr/bin/python

i = 0
while i<10 :
    print('.',end='')
    i = i+1

وتنفيذها مع python filename.py أو python3 filename.py


يمكنك القيام بذلك مع حجة end الطباعة. في نطاق python3 () ، لا يعود iterator و xrange () موجود.

for i in range(10): print('.', end='')

يمكنك فقط إضافة , في نهاية وظيفة print حتى لا تتم الطباعة على سطر جديد.


ملاحظة: كان عنوان هذا السؤال شيئًا مثل "How to printf in python؟"

نظرًا لأن الأشخاص قد يأتون إلى هنا بحثًا عن ذلك استنادًا إلى العنوان ، فإن 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
..........


for i in xrange(0,10): print '\b.',

عملت هذه في كل من 2.7.8 و 2.5.2 (محطة المظلة و OSX ، على التوالي) - أي واردات وحدة أو السفر عبر الزمن المطلوبة.





newline