2012-02-16 5 views
78

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

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 

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

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

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

+2

क्या आपने __future__ आयात प्रिंट_फंक्शन से किया था? पायथन <3 में, प्रिंट एक कथन है: – Ari

+1

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

उत्तर

117

आप अजगर 2 में print समारोह का उपयोग करना चाहते हैं, तो आप __future__ से आयात करने के लिए है:

from __future__ import print_function 

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

print >>f1, 'This is a test' 
50

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

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

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

+3

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

+0

@moose, पहले से ही एक उत्कृष्ट गंधारो का जवाब है, जिसमें मेरा उत्तर और आपका नोट शामिल है। – citxx

+0

मुझे 'AttributeError:' str 'ऑब्जेक्ट में आपके python3 वाक्यविन्यास – Suncatcher

6

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

3.0 की तुलना में पहले पायथन में एक फ़ाइल को मुद्रित करने के लिए आपको बस इतना चाहते हैं:

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

>> ऑपरेटर फ़ाइल f से प्रिंट निर्देश देता है।

+0

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

+0

@ सिगुर "टर्मिनल से आउटपुट की तरह" क्षमा करें, लेकिन बग कहीं और है। आप पाइथन को पूरी चीज प्रिंट करने के लिए नहीं कह रहे हैं, यही कारण है कि यह नहीं है। – wizzwizz4

11

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

python yourcode.py >> log.txt 
2

यह एक फ़ाइल

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