समाधान यहाँ के अधिकांश बस फ़ाइल है कि आप पढ़ रहे हैं में डेटा को पुन: फ़ॉर्मेट कर रहे हैं। शायद वह सब जो आप चाहते हैं।
यदि आप वास्तव में डेटा को पार्स करना चाहते हैं, तो इसे डेटा संरचना में रखें।
अजगर में यह उदाहरण:
data="""\
Name: John Doe2
address : 123 Main St, Los Angeles, CA 95002
phone: 213-123-1234
Name: John Doe1
address : 145 Pearl St, La Jolla, CA 92013
phone: 858-123-1233
Name: Billy Bob Doe3
address : 454 Heartland St, Mobile, AL 00103
phone: 205-123-1232""".split('\n\n') # just a fill-in for your file
# you would use `with open(file) as data:`
addr={}
w0,w1,w2=0,0,0 # these keep track of the max width of the field
for line in data:
fields=[e.split(':')[1].strip() for e in [f for f in line.split('\n')]]
nam=fields[0].split()
name=nam[-1]+', '+' '.join(nam[0:-1])
addr[(name,fields[2])]=fields
w0,w1,w2=[max(t) for t in zip(map(len,fields),(w0,w1,w2))]
अब आप सॉर्ट करने के लिए, स्वरूप, डेटाबेस में डाल बदलने की आजादी है, आदि
यह है कि डेटा के साथ अपने प्रारूप प्रिंट, हल कर:
for add in sorted(addr.keys()):
print 'Name: {0:{w0}} Address: {1:{w1}} phone: {2:{w2}}'.format(*addr[add],w0=w0,w1=w1,w2=w2)
प्रिंटों:
Name: John Doe1 Address: 145 Pearl St, La Jolla, CA 92013 phone: 858-123-1233
Name: John Doe2 Address: 123 Main St, Los Angeles, CA 95002 phone: 213-123-1234
Name: Billy Bob Doe3 Address: 454 Heartland St, Mobile, AL 00103 phone: 205-123-1232
यह अंतिम नाम से क्रमबद्ध है, पहला नाम dict कुंजी में उपयोग किया जाता है।
for add in sorted(addr.keys(),key=lambda x: addr[x][2]):
print 'Name: {0:{w0}} Address: {1:{w1}} phone: {2:{w2}}'.format(*addr[add],w0=w0,w1=w1,w2=w2)
प्रिंटों:
अब प्रिंट क्षेत्र कोड के अनुसार क्रमबद्ध
Name: Billy Bob Doe3 Address: 454 Heartland St, Mobile, AL 00103 phone: 205-123-1232
Name: John Doe2 Address: 123 Main St, Los Angeles, CA 95002 phone: 213-123-1234
Name: John Doe1 Address: 145 Pearl St, La Jolla, CA 92013 phone: 858-123-1233
लेकिन, जब से तुम एक अनुक्रमित शब्दकोश में डेटा है, तो आप के बजाय के अनुसार क्रमबद्ध एक मेज के रूप में यह मुद्रित कर सकते हैं जिप कोड:
# print table header
print '|{0:^{w0}}|{1:^{w1}}|{2:^{w2}}|'.format('Name','Address','Phone',w0=w0+2,w1=w1+2,w2=w2+2)
print '|{0:^{w0}}|{1:^{w1}}|{2:^{w2}}|'.format('----','-------','-----',w0=w0+2,w1=w1+2,w2=w2+2)
# print data sorted by last field of the address - probably a zip code
for add in sorted(addr.keys(),key=lambda x: addr[x][1].split()[-1]):
print '|{0:>{w0}}|{1:>{w1}}|{2:>{w2}}|'.format(*addr[add],w0=w0+2,w1=w1+2,w2=w2+2)
प्रिंटों:
+०१२३५१६४१०६१
| Name | Address | Phone |
| ---- | ------- | ----- |
| Billy Bob Doe3| 454 Heartland St, Mobile, AL 00103| 205-123-1232|
| John Doe1| 145 Pearl St, La Jolla, CA 92013| 858-123-1233|
| John Doe2| 123 Main St, Los Angeles, CA 95002| 213-123-1234|
आपने क्या प्रयास किया? – nneonneo
अच्छा प्रारंभिक प्रश्न, @ टाफीला। लेकिन, अगले प्रश्नों में इंगित करना न भूलें कि आपने क्या करने की कोशिश की है। – Yamaneko
क्या पता वास्तव में कोलन के बाद केवल एक पंक्ति है? –