পাইথন ব্যবহার করে কোনও ফাইলে 'মুদ্রণ' আউটপুট কীভাবে পুনর্নির্দেশ করা যায়?


184

আমি পাইথনটি ব্যবহার করে প্রিন্টটি একটি টেক্সট ফাইলে পুনর্নির্দেশ করতে চাই। আমার কাছে 'ফর' লুপ রয়েছে, যা আমার প্রতিটি .bam ফাইলের আউটপুট 'মুদ্রণ' করবে যখন আমি এই সমস্ত আউটপুটকে একটি ফাইলে পুনর্নির্দেশ করতে চাই। তাই আমি চেষ্টা করার চেষ্টা

 f = open('output.txt','w'); sys.stdout = f

আমার স্ক্রিপ্টের শুরুতে। তবে আমি .txt ফাইলটিতে কিছুই পাই না। আমার লিপিটি হ'ল:

#!/usr/bin/python

import os,sys
import subprocess
import glob
from os import path

f = open('output.txt','w')
sys.stdout = f

path= '/home/xug/nearline/bamfiles'
bamfiles = glob.glob(path + '/*.bam')

for bamfile in bamfiles:
    filename = bamfile.split('/')[-1]
    print 'Filename:', filename
    samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],
                                  stdout=subprocess.PIPE,bufsize=1)
    linelist= samtoolsin.stdout.readlines()
    print 'Readlines finished!'
    ........print....
    ........print....

তো সমস্যাটা কী? এই sys.stdout ছাড়া অন্য কোন উপায়?

আমার ফলাফলটি আমার মতো দেখতে দরকার:

Filename: ERR001268.bam
Readlines finished!
Mean: 233
SD: 10
Interval is: (213, 252)

7
কেন ব্যবহার f.write(data)করবেন না ?
ইরান জিম্মারম্যান গোনেন

হ্যাঁ, তবে প্রতিটি বাম ফাইলের জন্য আমার কাছে একাধিক ডেটা রয়েছে (মানে, এসডি, অন্তর ...), কীভাবে আমি এই ডেটাগুলি একের পর এক রাখতে পারি?

f.write(line)- এটি শেষে একটি লাইন ব্রেক সন্নিবেশ করায়।
ইরান জিম্মারম্যান গোনেন

8
@ ইরান জিম্মারম্যান: ডেটাতে f.write(line)একটি লাইন ব্রেক যোগ করে না।
হিউডব্রাউন

ঠিক বলেছেন, আমার খারাপ। f.write(line+'\n')যাইহোক, সর্বদা পারে ..
ইরান জিম্মারম্যান গোনেন

উত্তর:


274

এটি করার সর্বাধিক সুস্পষ্ট উপায় হ'ল কোনও ফাইল অবজেক্টে মুদ্রণ করা:

with open('out.txt', 'w') as f:
    print >> f, 'Filename:', filename     # Python 2.x
    print('Filename:', filename, file=f)  # Python 3.x

তবে, stdout পুনর্নির্দেশ আমার জন্যও কাজ করে। এটি সম্ভবত এক-অফ স্ক্রিপ্টের জন্য ঠিক আছে:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print 'i = ', i

sys.stdout = orig_stdout
f.close()

শেল থেকে বাহ্যিকভাবে পুনঃনির্দেশ করা অন্য একটি ভাল বিকল্প:

./script.py > out.txt

অন্য প্রশ্নগুলো:

আপনার লিপির প্রথম ফাইলের নাম কী? আমি এটি সূচনা দেখতে পাচ্ছি না।

আমার প্রথম অনুমান যে গ্লোব কোনও বামফিল খুঁজে পায় না, এবং সেইজন্য লুপটি চালায় না। ফোল্ডারটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন এবং আপনার স্ক্রিপ্টে বামফিলগুলি মুদ্রণ করুন।

এছাড়াও, পাথ এবং ফাইলের নামগুলি পরিচালনা করতে os.path.join এবং os.path.basename ব্যবহার করুন ।


আপনার কোডের 8 লাইনটি ভেরিয়েবলের নামযুক্ত ফাইলের নাম ব্যবহার করে তবে এটি এখনও তৈরি হয়নি। পরে লুপটিতে আপনি এটি আবার ব্যবহার করেন তবে প্রাসঙ্গিক নয়।
গ্রিংগো সুভেভ

2
আপনার প্রয়োজন না হলে sys.stdout পরিবর্তন করার জন্য খারাপ অনুশীলন।
মেশিন

3
@ আমার এই মত সরল স্ক্রিপ্টের পক্ষে খারাপ তা আমি বিশ্বাস করি না।
গ্রিঙ্গো সুভেভ

4
+1 হাহাহা ভালই আপনি আমার আপটোট করতে পারেন কারণ এটি করার সঠিক উপায় যদি আপনার অবশ্যই একে অবশ্যই ভুল পদ্ধতিতে করতে হয় ... তবে আমি এখনও বলছি আপনার নিয়মিত ফাইল আউটপুট দিয়ে এটি করা উচিত।
মেশিন আকাঙ্ক্ষিত

1
কনসোলে আউটপুট পুনঃনির্দেশ এবং মুদ্রণ করবেন কীভাবে? দেখে মনে হচ্ছে যে stdrr পুনঃনির্দেশিত হলে পাইথনের "মুদ্রণ ()" দেখানো যাবে না?
প্রাক্তন

70

আপনি >>অপারেটরের সাথে মুদ্রণ পুনর্নির্দেশ করতে পারেন ।

f = open(filename,'w')
print >>f, 'whatever'     # Python 2.x
print('whatever', file=f) # Python 3.x

বেশিরভাগ ক্ষেত্রে, আপনি কেবল ফাইলটিতে সাধারণত লেখার চেয়ে ভাল।

f.write('whatever')

বা, যদি আপনার বেশ কয়েকটি আইটেম থাকে তবে আপনি ফাঁকা ফাঁকে ফাঁকে লিখতে চান, যেমন print:

f.write(' '.join(('whatever', str(var2), 'etc')))

2
যদি প্রচুর আউটপুট বিবৃতি থাকে তবে এগুলি পুরানো দ্রুত পেতে পারে। পোস্টারগুলির মূল ধারণাটি বৈধ; স্ক্রিপ্টের সাথে অন্য কিছু ভুল আছে।
গ্রিংগো সুভেভ

1
পোস্টারের মূল ধারণাটি সম্পূর্ণ অবৈধ। এখানে stdout পুনর্নির্দেশ করার কোন কারণ নেই, যেহেতু সে ইতিমধ্যে ডেটাটি একটি ভেরিয়েবলের মধ্যে পেয়েছে।
মেশিন

আমি মনে করি তিনি "প্রযুক্তিগতভাবে বৈধ" বলতে চাইছিলেন, আপনি এটি সত্যই পুনর্নির্দেশ করতে পারেন, sys.stdoutএটি একটি ভাল ধারণা ছিল না।
agf

35

পাইথন 2 বা পাইথন 3 এপিআই রেফারেন্স:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

ফাইল যুক্তি দিয়ে একটি বস্তু হতে হবে write(string)পদ্ধতি; যদি এটা বর্তমান নয় অথবা None, sys.stdoutব্যবহার করা হবে। যেহেতু মুদ্রিত আর্গুমেন্টগুলি পাঠ্য স্ট্রিংয়ে রূপান্তরিত হয় তাই print()বাইনারি মোড ফাইল অবজেক্টের সাথে ব্যবহার করা যায় না। এর জন্য file.write(...)পরিবর্তে ব্যবহার করুন।

যেহেতু ফাইল অবজেক্টে সাধারণত write()পদ্ধতি থাকে, তাই আপনার যা করা দরকার তা হ'ল কোনও ফাইল অবজেক্টকে তার আর্গুমেন্টে পাস করা।

ফাইলটিতে লিখুন / ওভাররাইট করুন

with open('file.txt', 'w') as f:
    print('hello world', file=f)

ফাইল লিখুন / সংযোজন

with open('file.txt', 'a') as f:
    print('hello world', file=f)

2
আমি কেবল বিভ্রান্ত হয়েছি কেন এই পূর্ববর্তী উত্তরগুলির মধ্যে কয়েকটি কেন বিশ্বব্যাপী বানরকে প্যাচ করছিল sys.stdout:(
ইয়েও

35

এটি নিখুঁতভাবে কাজ করে:

import sys
sys.stdout=open("test.txt","w")
print ("hello")
sys.stdout.close()

এবার হ্যালোটি test.txt ফাইলটিতে লেখা হবে। এটি stdoutদিয়ে একটিটি বন্ধ করে দেওয়ার বিষয়টি নিশ্চিত করুন close, এগুলি ছাড়া ফাইলটিতে সামগ্রীটি সংরক্ষণ করা হবে না


3
তবে আমরা যদি পারফর্ম করি sys.stdout.close()তবে আপনি পাইথন শেলটিতে কিছু টাইপ করলে এটি ValueError: I/O operation on closed file. ইমগুর . com/a/xby9P হিসাবে ত্রুটি দেখাবে । শ্রেষ্ঠ উপায় এই হ্যান্ডেল করতে হবে তা @Gringo Suave থেকে পোস্ট অনুসরণ
যে মৌর্য্য

24

ব্যবহার করবেন না print, ব্যবহার করুনlogging

আপনি sys.stdoutকোনও ফাইলের দিকে নির্দেশ করতে পারেন তবে এই সমস্যাটি হ্যান্ডেল করার এটি বেশ চমত্কার এবং জটিল। পরিবর্তে ব্যবহার করার পরিবর্তে, মডিউলটি printব্যবহার করুন logging

এর সাহায্যে loggingআপনি যেমন চান তেমন মুদ্রণ করতে পারেন stdout, বা আপনি কোনও ফাইলে আউটপুটও লিখতে পারেন। এমনকি আপনি বিভিন্ন বার্তা মাত্রা ব্যবহার করুন (করতে critical, error, warning, info, debug), উদাহরণস্বরূপ, একমাত্র প্রধান বিষয় কনসোলে প্রিন্ট করতে, কিন্তু এখনও একটি ফাইলে ছোটখাট কোড কর্ম লগ ইন করুন।

একটি সহজ উদাহরণ

আমদানি করুন logging, পান loggerএবং প্রসেসিং স্তর নির্ধারণ করুন:

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # process everything, even if everything isn't printed

আপনি stdout এ মুদ্রণ করতে চান:

ch = logging.StreamHandler()
ch.setLevel(logging.INFO) # or any other level
logger.addHandler(ch)

আপনি যদি কোনও ফাইলকেও লিখতে চান (আপনি কেবল একটি ফাইলটিতে লিখতে চান তবে শেষ বিভাগটি এড়িয়ে যান):

fh = logging.FileHandler('myLog.log')
fh.setLevel(logging.DEBUG) # or any level you want
logger.addHandler(fh)

তারপরে, যেখানেই আপনি যে কোনও printএকটি loggerপদ্ধতি ব্যবহার করবেন :

# print(foo)
logger.debug(foo)

# print('finishing processing')
logger.info('finishing processing')

# print('Something may be wrong')
logger.warning('Something may be wrong')

# print('Something is going really bad')
logger.error('Something is going really bad')

আরও উন্নত loggingবৈশিষ্ট্য ব্যবহার সম্পর্কে আরও জানতে , loggingপাইথন ডক্সে দুর্দান্ত টিউটোরিয়াল পড়ুন ।


হাই, আমি এই লগিংটি লগ ফাইলে কনসোল ডেটা লেখার জন্য যে সময়ের সাথে সাথে নেওয়া হয়েছিল সেই সময়ের সাথে ব্যবহার করতে চাই। তবে আমি লগিং ফাংশন বা লাইব্রেরিটি সঠিকভাবে বুঝতে সক্ষম নই। আপনি কি আমাকে
এটিতে

@ হারিস পাইথন ডক্সের লগিং টিউটোরিয়াল পড়ুন এবং স্ট্যাক ওভারফ্লোতে অন্যান্য প্রশ্নের উদাহরণগুলি দেখুন (সেগুলির অনেকগুলি রয়েছে)। আপনি যদি এখনও এটি কাজ করতে অক্ষম হন তবে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন।
jpyams

12

সবচেয়ে সহজ সমাধানটি অজগর দিয়ে নয়; এটি শেল মাধ্যমে। আপনার ফাইলের প্রথম লাইন থেকে ( #!/usr/bin/python) আমি অনুমান করছি আপনি একটি ইউনিক্স সিস্টেমে আছেন। printআপনার মত সাধারণভাবে স্টেটমেন্টগুলি ব্যবহার করুন , এবং আপনার স্ক্রিপ্টে কোনও ফাইলই খুলবেন না। আপনি যখন ফাইল চালাতে যান, পরিবর্তে

./script.py

ফাইল চালাতে, ব্যবহার করুন

./script.py > <filename>

যেখানে আপনি <filename>যে ফাইলটির নামের সাথে প্রতিস্থাপন করবেন আপনি আউটপুটটিতে যেতে চান। >টোকেন টোকেন অনুসরণ করে বর্ণিত ফাইলে (অধিকাংশ) সেট stdout- এ শাঁস বলে।

এখানে একটি গুরুত্বপূর্ণ বিষয় উল্লেখ করার দরকার যা হ'ল "স্ক্রিপ্ট.পি" ./script.pyচালানোর জন্য নির্বাহযোগ্য করা দরকার ।

সুতরাং চলমান আগে ./script.py, এই কমান্ড চালানো

chmod a+x script.py (সমস্ত ব্যবহারকারীর জন্য স্ক্রিপ্ট কার্যকর করা যায়)


3
./script.py> <ফাইল ফাইল> 2> & 1 আপনার পাশাপাশি স্ট্যাডারকে ক্যাপচার করতে হবে। 2> এবং 1 এটি করবে
rtaft

1
@ আর্টাফ্ট কেন? প্রশ্নটি বিশেষত printকোনও ফাইলের আউটপুট পাইপ করতে চায় । স্ট্যান্ডআউট (স্ট্যাক ট্রেস এবং এর মতো) এখনও টার্মিনালে প্রিন্ট করা আশা করা যুক্তিসঙ্গত হবে।
হারুন ডুফর

তিনি বলেছিলেন এটি কাজ করছে না, আমারও কাজ করছে না। পরে আমি আবিষ্কার করেছি যে আমি যে অ্যাপটিতে কাজ করছি সেটিকে স্ট্যাডার ... আইডিকে কেন নির্দেশিত করার জন্য কনফিগার করা হয়েছিল।
rtaft

5

আপনি যদি লিনাক্স ব্যবহার করেন তবে আমি আপনাকে teeকমান্ডটি ব্যবহার করার পরামর্শ দিচ্ছি । বাস্তবায়নটি এরকম হয়:

python python_file.py | tee any_file_name.txt

আপনি যদি কোডটিতে কোনও কিছু পরিবর্তন না করতে চান তবে আমি মনে করি এটি সম্ভবত সেরা সমাধান হতে পারে। আপনি লগার প্রয়োগ করতে পারেন তবে কোডে আপনার কিছু পরিবর্তন করা দরকার।


1
মহান; এটি অনুসন্ধান করা হয়েছিল
ভিক্রোবট

4

আপনি এই উত্তরটি পছন্দ নাও করতে পারেন তবে আমি মনে করি এটি সঠিক। আপনার স্টাডাউট গন্তব্যটি সম্পূর্ণরূপে প্রয়োজনীয় না হলে পরিবর্তন করবেন না (সম্ভবত আপনি এমন একটি লাইব্রেরি ব্যবহার করছেন যা কেবল স্টডআউটকে আউটপুট করে ???

আমি মনে করি একটি ভাল অভ্যাস হিসাবে আপনার স্ট্রিং হিসাবে সময়ের আগে ডেটা প্রস্তুত করা উচিত, তারপরে আপনার ফাইলটি খুলুন এবং পুরো জিনিসটি একবারে লিখুন। এটি কারণ ইনপুট / আউটপুট ক্রিয়াকলাপগুলি আপনার যতক্ষণ ফাইল হ্যান্ডেল খোলা থাকে ততই এই ফাইলটির সাথে ত্রুটি হওয়ার সম্ভাবনা থাকে (ফাইল লক ত্রুটি, আই / ও ত্রুটি ইত্যাদি)। কেবলমাত্র একটি অপারেশনে এটি করা কখন কখন ভুল হয়ে গেছে সে সম্পর্কে কোনও প্রশ্নই আসে না।

এখানে একটি উদাহরণ:

out_lines = []
for bamfile in bamfiles:
    filename = bamfile.split('/')[-1]
    out_lines.append('Filename: %s' % filename)
    samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],
                                  stdout=subprocess.PIPE,bufsize=1)
    linelist= samtoolsin.stdout.readlines()
    print 'Readlines finished!'
    out_lines.extend(linelist)
    out_lines.append('\n')

এবং তারপরে আপনি যখন সমস্ত "তালিকার আইটেম লাইন" তালিকা আইটেম প্রতি এক লাইন সংগ্রহ সম্পন্ন করেন, আপনি '\n'পুরো জিনিস আউটপুটযোগ্য করতে কিছু অক্ষর দিয়ে তাদের সাথে যোগ দিতে পারেন ; এমনকি withঅতিরিক্ত সুরক্ষার জন্য এমনকি আপনার আউটপুট স্টেটমেন্টটি কোনও ব্লকে মোড়ানোও (কিছু ভুল হয়ে গেলেও স্বয়ংক্রিয়ভাবে আপনার আউটপুট হ্যান্ডেলটি বন্ধ করে দেবে):

out_string = '\n'.join(out_lines)
out_filename = 'myfile.txt'
with open(out_filename, 'w') as outf:
    outf.write(out_string)
print "YAY MY STDOUT IS UNTAINTED!!!"

তবে যদি আপনি লিখতে তথ্য প্রচুর আছে, তবে আপনি পারে এটা একটি সময়ে এক টুকরা লিখুন। এটি আপনার আবেদনের সাথে প্রাসঙ্গিক বলে মনে করি না তবে বিকল্পটি এখানে রয়েছে:

out_filename = 'myfile.txt'
outf = open(out_filename, 'w')
for bamfile in bamfiles:
    filename = bamfile.split('/')[-1]
    outf.write('Filename: %s' % filename)
    samtoolsin = subprocess.Popen(["/share/bin/samtools/samtools","view",bamfile],
                                  stdout=subprocess.PIPE,bufsize=1)
    mydata = samtoolsin.stdout.read()
    outf.write(mydata)
outf.close()

1
মূলটির সাথে ডিস্ক ক্যাচিং পারফরম্যান্স গ্রহণযোগ্য হবে। এই সমাধানটিতে মেমরির প্রয়োজনীয়তাগুলি বেলুন করার অপূর্ণতা রয়েছে যদি খুব বেশি আউটপুট থাকে। যদিও এখানে উদ্বিগ্ন হওয়ার কিছু নেই তবে সাধারণত এটি সম্ভব হলে এড়ানো ভাল ধারণা। ইত্যাদি পরিসীমা পরিবর্তে xrange (py3 পরিসীমা) ব্যবহার হিসাবে একই ধারণা
বিদেশী Suave থেকে

@ গ্রেঙ্গো: তিনি এই প্রয়োজনীয়তাটি নির্দিষ্ট করেন নি। খুব কমই আমি কখনও কোনও ফাইলের জন্য পর্যাপ্ত ডেটা লিখি যা এটি প্রাসঙ্গিক। এটি এক্সরঞ্জের মতো একই ধারণা নয় কারণ এক্সরেঞ্জ i / o ফাইলের সাথে কাজ করে না। ডিস্ক ক্যাচিংয়ে সহায়তা করতে পারে তবে একটি বৃহত কোডের ফাইলের জন্য একটি ফাইল হ্যান্ডেল খোলা রাখা এখনও খারাপ অভ্যাস।
মেশিন

1
আপনার মন্তব্য নিজেই স্ববিরোধী। সত্য কথা বলতে গেলে উভয় পদ্ধতির পারফরম্যান্স দিকটি অ-বিশাল পরিমাণে ডেটার জন্য অপ্রাসঙ্গিক। এক্সরেঞ্জ অবশ্যই একই রকম, এটি একবারে মেমরির পরিবর্তে একবারে এক টুকরোতে কাজ করে। সম্ভবত জেনারেটর বনাম তালিকা যদিও এর চেয়ে আরও ভাল উদাহরণ।
গ্রিংগো সুভেভ

@ গ্রিঙ্গো: আমার মন্তব্য কীভাবে তার বিরোধিতা করে তা দেখতে আমি ব্যর্থ হয়েছি। হতে পারে পারফরম্যান্স দিকটি প্রাসঙ্গিক নয়, বর্ধিত সময়ের জন্য কোনও ফাইল হ্যান্ডেল খোলা রাখলে ত্রুটির ঝুঁকি বাড়ে। প্রোগ্রামিং ফাইলগুলিতে আই / ও সর্বদা আপনার নিজের প্রোগ্রামের মধ্যে কিছু করার চেয়ে সহজাত অধিক ঝুঁকিপূর্ণ হয়, কারণ এর অর্থ আপনাকে ফাইল লক সহ ওএসের মাধ্যমে এবং গণ্ডগোলের মধ্য দিয়ে পৌঁছাতে হবে। আপনার জন্য যে ফাইলটি সংক্ষিপ্ত আকারে খোলা থাকবে, ততই ভাল, কেবল কারণ আপনি নিজের কোড থেকে ফাইল সিস্টেমটি নিয়ন্ত্রণ করেন না। এক্সরেঞ্জ আলাদা কারণ কারণ ফাইল আই / ও এর সাথে এর কোনও যোগসূত্র নেই এবং এফওয়াইআই আমি খুব কমই এক্সরঞ্জ ব্যবহার করি; চিয়ার্স
মেশিন আধ্যাত্মিকভাবে

2
@ গ্রেঙ্গো: আমি আপনার সমালোচনার প্রশংসা করি এবং উত্তপ্ত বিতর্ক উপভোগ করেছি। যদিও আমরা কিছু বিষয়গুলিতে দ্বিমত পোষণ করি না কেন আমি এখনও আপনার মতামতকে সম্মান করি কারণ এটি স্পষ্ট যে আপনার অবস্থান গ্রহণের জন্য আপনার কাছে ভাল কারণ রয়েছে। যুক্তিযুক্তভাবে এটি শেষ করার জন্য এবং একটি খুব সুন্দর রাত কাটানোর জন্য ধন্যবাদ। : পি
মেশিন 3 ই

2

যদি stdoutআপনার সমস্যার জন্য পুনঃনির্দেশ কাজ করে তবে গ্রিডো সুভেভের উত্তর এটি কীভাবে করা যায় তার জন্য একটি ভাল প্রদর্শন।

এটিকে আরও সহজ করার জন্য , আমি বিবৃতিটি ব্যবহার করে একটি সংযোগকারী সাধারণ কলিং সিনট্যাক্সের জন্য প্রসঙ্গের ব্যবস্থাপনার ব্যবহার করে একটি সংস্করণ তৈরি করেছি with:

from contextlib import contextmanager
import sys

@contextmanager
def redirected_stdout(outstream):
    orig_stdout = sys.stdout
    try:
        sys.stdout = outstream
        yield
    finally:
        sys.stdout = orig_stdout

এটি ব্যবহার করতে, আপনি কেবল নিম্নলিখিতটি করেন (সুয়েভের উদাহরণ থেকে প্রাপ্ত):

with open('out.txt', 'w') as outfile:
    with redirected_stdout(outfile):
        for i in range(2):
            print('i =', i)

printযখন কোনও মডিউল আপনার পছন্দ না করে এমনভাবে ব্যবহার করে তা নির্বাচনী পুনর্নির্দেশের জন্য দরকারী । একমাত্র অসুবিধা (এবং এটি অনেক পরিস্থিতিতে ডিলব্রেকার) হ'ল এটি যদি বিভিন্ন মানগুলির একাধিক থ্রেড চায় তবে এটি কাজ করে না stdout, তবে এর জন্য আরও ভাল, আরও সাধারণীকরণ পদ্ধতি প্রয়োজন: পরোক্ষ মডিউল অ্যাক্সেস। আপনি এই প্রশ্নের অন্যান্য উত্তরে এর বাস্তবায়ন দেখতে পাচ্ছেন।


0

Sys.stdout এর মান পরিবর্তন করা মুদ্রণের জন্য সমস্ত কলের গন্তব্য পরিবর্তন করে। আপনি যদি মুদ্রণের গন্তব্য পরিবর্তন করতে বিকল্প উপায় ব্যবহার করেন তবে আপনি একই ফলাফল পাবেন।

আপনার বাগটি অন্য কোথাও রয়েছে:

  • এটি আপনার প্রশ্নের জন্য আপনি যে কোডটি সরিয়ে দিয়েছেন তাতে থাকতে পারে (কলটি খোলার জন্য ফাইলের নামটি কোথা থেকে আসে?)
  • এটি এমনও হতে পারে যে আপনি ডেটা ফ্লাশ হওয়ার জন্য অপেক্ষা করছেন না: আপনি যদি কোনও টার্মিনালে মুদ্রণ করেন তবে প্রতিটি নতুন লাইনের পরে ডেটা ফ্লাশ করা হয় তবে আপনি যদি কোনও ফাইলে মুদ্রণ করেন তবে স্ট্যাডআউট বাফার পূর্ণ হলে এটি কেবল ফ্লাশ হবে (4096 বাইট) বেশিরভাগ সিস্টেমে)

-1

লুপগুলির জন্য মুদ্রণ ফাংশন প্রসারিত করার জন্য কিছু

x = 0
while x <=5:
    x = x + 1
    with open('outputEis.txt', 'a') as f:
        print(x, file=f)
    f.close()

ব্যবহার করার দরকার নেই এবং ব্যবহার whileকরার সময় ফাইলটি বন্ধ করার দরকার নেইwith
ড্যানিয়েল স্ট্রাকাবোস্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.