पायथन 2.7: फाइल में प्रिंट करें


97

sys.stdoutनिम्न सिंटैक्स त्रुटि उत्पन्न करने के बजाय सीधे फ़ाइल में प्रिंट करने का प्रयास क्यों किया जाता है :

Python 2.7.2+ (default, Oct  4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f1=open('./testfile', 'w+')
>>> print('This is a test', file=f1)
  File "<stdin>", line 1
    print('This is a test', file=f1)
                            ^
SyntaxError: invalid syntax

मदद से (__ buildins__) मेरे पास निम्नलिखित जानकारी है:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file: a file-like object (stream); defaults to the current sys.stdout.
    sep:  string inserted between values, default a space.
    end:  string appended after the last value, default a newline.

तो मानक स्ट्रीम प्रिंट को लिखने के लिए बदलने के लिए सही सिंटैक्स क्या होगा?

मुझे पता है कि फाइल करने के लिए लिखने के अलग-अलग तरीके हो सकते हैं लेकिन मुझे वास्तव में ऐसा नहीं लगता कि यह सिंटैक्स त्रुटि क्यों होनी चाहिए ...

एक अच्छी व्याख्या की सराहना की जाएगी!


3
क्या आपको यकीन है? print()अजगर 3.x अंतर्निहित फ़ंक्शन है, जबकि printअजगर <3.x ऑपरेटर है। पोस्ट दिखाता है 2.7.2+
खटिक

2
क्या आपने from __future__ import print_function? पायथन <3 में, प्रिंट एक बयान है:
अरी

1
नहीं! मैंने नहीं किया। बेशक आप ठीक हैं। वह समस्या को हल करता है। Dammit! तो प्रलेखित प्रिंट इन हेल्प (_ बिलिंस_ ) प्रिंट का भविष्य (3.x) संस्करण है जिसमें एक अलग वाक्यविन्यास है। बहुत बहुत धन्यवाद और आप भी, kachik
एलेक्स

2
IMO, यह help(__builtins__)दर्शाता है कि एक बग है।
Wooble

3
... हालांकि, आगे की जांच, अजगर 2.7.2 है एक अंतर्निहित प्रिंट समारोह, तो आप सिर्फ यह आसानी से सामान्य रूप से उपयोग नहीं कर सकते है ( __builtins__.__dict__['print'](value, file=f1), काम करता है)।
Wooble

जवाबों:


138

यदि आप printपायथन 2 में फ़ंक्शन का उपयोग करना चाहते हैं , तो आपको __future__निम्न से आयात करना होगा :

from __future__ import print_function

लेकिन आप फ़ंक्शन का उपयोग किए बिना भी एक ही प्रभाव डाल सकते हैं:

print >>f1, 'This is a test'

72

python 2.X में प्रिंट एक कीवर्ड है। आपको निम्नलिखित का उपयोग करना चाहिए:

f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()

2
इसे प्रिंट करने के लिए आपको '\ n' जोड़ना होगा।
jlh

44

print(args, file=f1)अजगर 3.x वाक्यविन्यास है। अजगर के लिए 2.x का उपयोग करें print >> f1, args


3
मुझे लगता है कि आपको भी उल्लेख करना चाहिए from __future__ import print_function। फिर आप दोनों पायथन 2 और 3 में स्पष्ट संकेतन का उपयोग कर सकते हैं
मार्टिन थोमा

@ इसके अलावा, पहले से ही एक उत्कृष्ट गैंडारो का उत्तर है, जिसमें मेरा उत्तर और आपका नोट शामिल है।
21

2
मैं AttributeError: 'str' object has no attribute 'write'अपने python3 वाक्य रचना के साथ
Suncatcher

5
@Suncatcher, आप शायद वास्तविक फ़ाइल ऑब्जेक्ट के बजाय स्ट्रिंग को फ़ाइल नाम f1 के रूप में पास करने की कोशिश कर रहे हैं। आपको पहले लिखने के लिए फ़ाइल खोलने की आवश्यकता है:f1 = open('path_to_your_file', 'w')
citxx

हाँ, मुझे लगा कि यह फ़ाइल नाम होना चाहिए, न कि फ़ाइल ऑब्जेक्ट।
सनकैचर

13

आप किसी भी कोड को बदले बिना फाइल स्टेटमेंट को प्रिंट कर सकते हैं। बस एक टर्मिनल विंडो खोलें और अपना कोड इस तरह से चलाएं:

python yourcode.py >> log.txt

11

यह आपके 'प्रिंट' आउटपुट को एक फ़ाइल में रीडायरेक्ट करेगा।

import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.txt"

क्या यह बंदर का पेटिंग है?
सारथ सदाशिवन पिल्लई

6

पायथन 3.0+ में, print फ़ंक्शन है , जिसे आप कॉल करेंगे print(...)। पहले के संस्करण में, printएक वक्तव्य है , जिसे आप बनायेंगेprint ...

3.0 से पहले पायथन में एक फ़ाइल को प्रिंट करने के लिए, आप यह करेंगे:

print >> f, 'what ever %d', i

>>ऑपरेटर फाइल करने के लिए प्रिंट का निर्देशन f


मैं फ़ाइल के लिए एक संपूर्ण सरणी मुद्रित करना चाहता हूं। यदि मैं आपके कोड का उपयोग करता हूं, तो टर्मिनल से आउटपुट की तरह, केवल सरणी का सिर और पूंछ मुद्रित किया गया था। फ़ाइल में सभी सरणी लाइनें कैसे प्रिंट करें?
Sigur

@ सिगर "टर्मिनल से आउटपुट की तरह" क्षमा करें, लेकिन बग का कहीं और। आप पायथन को पूरी बात छापने के लिए नहीं कह रहे हैं, यही वजह है कि ऐसा नहीं है।
wizzwizz4 19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.