मेरे पास एक पायथन स्क्रिप्ट है जो एक .txt फ़ाइल को संसाधित करती है जिसमें रिपोर्ट उपयोग जानकारी होती है। मैं pprint के pprint (vars (ऑब्जेक्ट)) फ़ंक्शन का उपयोग करके ऑब्जेक्ट के गुणों को साफ़ रूप से मुद्रित करने का एक तरीका ढूंढना चाहता हूं।बिल्ट-इन __str __ (स्वयं) विधि का उपयोग करके किसी ऑब्जेक्ट को प्रिंट करने के लिए पप्रिंट का उपयोग कैसे करें?
स्क्रिप्ट फ़ाइल को पढ़ता है और रिपोर्ट क्लास के उदाहरण बनाता है। कक्षा यहाँ है।
class Report(object):
def __init__(self, line, headers):
self.date_added=get_column_by_header(line,headers,"Date Added")
self.user=get_column_by_header(line,headers,"Login ID")
self.report=get_column_by_header(line,headers,"Search/Report Description")
self.price=get_column_by_header(line,headers,"Price")
self.retail_price=get_column_by_header(line,headers,"Retail Price")
def __str__(self):
from pprint import pprint
return str(pprint(vars(self)))
मैं सफाई से रिपोर्ट के उदाहरण मुद्रित करने के लिए एक-la-pprint सक्षम होने के लिए करना चाहते हैं।
for i,line in enumerate(open(path+file_1,'r')):
line=line.strip().split("|")
if i==0:
headers=line
if i==1:
record=Report(line,headers)
print record
जब मैं रिपोर्ट का एक उदाहरण के लिए
print record
कहते हैं, यह है कि क्या मैं खोल में मिलता है।
{'date_added': '1/3/2012 14:06',
'price': '0',
'report': 'some_report',
'retail_price': '0.25',
'user': 'some_username'}
None
मेरा प्रश्न दो गुना है।
सबसे पहले, क्या यह ऑब्जेक्ट के विशेषताओं को स्पष्ट रूप से मुद्रित करने का एक अच्छा/वांछित तरीका है? क्या पीप्रिंट के साथ या बिना ऐसा करने का कोई बेहतर तरीका है?
दूसरा, क्यों अंत में खोल करने के लिए
None
प्रिंट करता है? मैं उलझन में हूं कि वह कहां से आ रहा है।
किसी भी सुझाव के लिए धन्यवाद।
ओर टिप्पणी जब आप pprint आयात pprint से शामिल हैं, यदि आप केवल एक या दो बार यह ठीक है इस पद्धति का उपयोग कर रहे हैं, लेकिन एक आमतौर पर इस्तेमाल किया विधि के लिए इस मॉड्यूल को हर बार विधि कहा जाता है (कम्प्यूटेशनल रूप से गहन) आयात किया जा रहा है। मुझे लगता है कि शीर्ष पर आपके मॉड्यूल आयात करना बेहतर हो सकता है। इसके अलावा यह पाइथन स्क्रिप्ट में समग्र प्रदर्शन में सुधार करता है। – lukecampbell
@ ल्यूकेकैम्पबेल - बाद में आयात के बारे में सच नहीं है जो कम्प्यूटेशनल गहन है। जब आप आयात करते हैं, तो यह देखने के लिए कि यह पहले से लोड हो चुका है, तंत्र sys.modules में एक ताना में दिखता है। यदि ऐसा है, तो कुछ और नहीं किया जाता है। केवल तभी आयात किया जाता है जब आयात तंत्र कुछ और करता है। – bgporter
@bgporter: यदि आप ऑब्जेक्ट का एक और उदाहरण बनाते हैं तो क्या होगा? –