क्या यह किसी फ़ाइल में सूची लिखने का सबसे साफ़ तरीका है, क्योंकि writelines()
इसमें नए वर्ण सम्मिलित नहीं हैं?
file.writelines(["%s\n" % item for item in list])
ऐसा लगता है कि एक मानक तरीका होगा ...
क्या यह किसी फ़ाइल में सूची लिखने का सबसे साफ़ तरीका है, क्योंकि writelines()
इसमें नए वर्ण सम्मिलित नहीं हैं?
file.writelines(["%s\n" % item for item in list])
ऐसा लगता है कि एक मानक तरीका होगा ...
जवाबों:
आप एक लूप का उपयोग कर सकते हैं:
with open('your_file.txt', 'w') as f:
for item in my_list:
f.write("%s\n" % item)
पायथन 2 में, आप भी उपयोग कर सकते हैं
with open('your_file.txt', 'w') as f:
for item in my_list:
print >> f, item
यदि आप किसी एकल फ़ंक्शन कॉल के लिए उत्सुक हैं []
, तो कम से कम चौकोर कोष्ठक हटा दें , ताकि प्रिंट किए जाने वाले तार एक समय में एक हो जाएं (एक सूची के बजाय एक जीनएक्सपी) - सभी आवश्यक मेमोरी लेने का कोई कारण नहीं तार की पूरी सूची तैयार करने के लिए।
thefile.write('\n'.join(thelist))
thefile.write(str(item) + "\n")
आप फ़ाइल के साथ क्या करने जा रहे हैं? क्या यह फ़ाइल मनुष्यों के लिए, या अन्य कार्यक्रमों के लिए मौजूद है जो स्पष्ट अंतर-आवश्यकताओं के साथ हैं?
यदि आप केवल उसी अजगर ऐप द्वारा बाद में उपयोग के लिए डिस्क को क्रमबद्ध करने की कोशिश कर रहे हैं, तो आपको सूची को चुनना चाहिए ।
import pickle
with open('outfile', 'wb') as fp:
pickle.dump(itemlist, fp)
इसे वापस पढ़ने के लिए:
with open ('outfile', 'rb') as fp:
itemlist = pickle.load(fp)
open( "save.p", "wb" )
open( "save.p", "rb" )
with:
ब्लॉक के अगले बयान के बाहर करने के लिए जारी रखने से पहले फ़ाइल बंद हो जाएगा with
ब्लॉक।
सरल तरीका है:
with open("outfile", "w") as outfile:
outfile.write("\n".join(itemlist))
आप यह सुनिश्चित कर सकते हैं कि आइटम सूची में सभी आइटम एक जनरेटर अभिव्यक्ति का उपयोग करके तार हैं:
with open("outfile", "w") as outfile:
outfile.write("\n".join(str(item) for item in itemlist))
याद रखें कि सभी itemlist
सूची को मेमोरी में रखने की आवश्यकता है, इसलिए, मेमोरी खपत के बारे में ध्यान रखें।
पायथन 3 और पायथन 2.6+ सिंटैक्स का उपयोग करना :
with open(filepath, 'w') as file_handler:
for item in the_list:
file_handler.write("{}\n".format(item))
यह प्लेटफॉर्म-स्वतंत्र है। यह एक नई लाइन चरित्र के साथ अंतिम पंक्ति को भी समाप्त करता है, जो एक यूनिक्स सबसे अच्छा अभ्यास है ।
पायथन 3.6 के साथ शुरू, "{}\n".format(item)
एक एफ-स्ट्रिंग के साथ बदला जा सकता है f"{item}\n"
:।
file_handler.write("\n".join(str(item) for item in the_list))
फिर भी एक और तरीका। का उपयोग कर json को क्रमानुसार simplejson (के रूप में शामिल json अजगर 2.6 में):
>>> import simplejson
>>> f = open('output.txt', 'w')
>>> simplejson.dump([1,2,3,4], f)
>>> f.close()
यदि आप आउटपुट की जांच करते हैं।
[१, २, ३, ४]
यह उपयोगी है क्योंकि वाक्य रचना pythonic है, यह मानव पठनीय है, और इसे अन्य भाषाओं में अन्य कार्यक्रमों द्वारा पढ़ा जा सकता है।
मैंने सोचा कि एक जीनएक्सपी का उपयोग करने के लाभों का पता लगाना दिलचस्प होगा, इसलिए यहां मेरा लेना है।
प्रश्न में उदाहरण एक अस्थायी सूची बनाने के लिए वर्ग कोष्ठक का उपयोग करता है, और इसलिए इसके बराबर है:
file.writelines( list( "%s\n" % item for item in list ) )
जो अनावश्यक रूप से उन सभी लाइनों की एक अस्थायी सूची का निर्माण करता है, जो बाहर लिखी जाएँगी, इससे आपकी सूची के आकार और कैसे के क्रिया के आधार पर महत्वपूर्ण मात्रा में मेमोरी का उपभोग हो सकता str(item)
है।
वर्ग कोष्ठक ड्रॉप (समकक्ष रैपिंग को दूर करने के list()
बजाय एक अस्थायी पारित करेंगे ऊपर कॉल) जनरेटर के लिए file.writelines()
:
file.writelines( "%s\n" % item for item in list )
यह जनरेटर item
ऑन-डिमांड (यानी जैसा कि वे लिखे गए हैं) में आपकी वस्तुओं की नई-अवधि-निरूपित प्रतिनिधित्व बनाएंगे । यह कुछ कारणों से अच्छा है:
str(item)
धीमी है तो फ़ाइल में प्रगति दिखाई दे रही है क्योंकि प्रत्येक आइटम संसाधित हैयह स्मृति समस्याओं से बचता है, जैसे:
In [1]: import os
In [2]: f = file(os.devnull, "w")
In [3]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )
1 loops, best of 3: 385 ms per loop
In [4]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )
ERROR: Internal Python error in the inspect module.
Below is the traceback from this internal error.
Traceback (most recent call last):
...
MemoryError
(मैंने पायथन की अधिकतम वर्चुअल मेमोरी को ~ 100MB के साथ सीमित करके इस त्रुटि को ट्रिगर किया है ulimit -v 102400
)।
स्मृति उपयोग को एक तरफ रखना, यह विधि वास्तव में मूल से अधिक तेज़ नहीं है:
In [4]: %timeit f.writelines( "%s\n" % item for item in xrange(2**20) )
1 loops, best of 3: 370 ms per loop
In [5]: %timeit f.writelines( ["%s\n" % item for item in xrange(2**20)] )
1 loops, best of 3: 360 ms per loop
(लिनक्स पर पायथन 2.6.2)
क्योंकि मैं आलसी हूँ ...।
import json
a = [1,2,3]
with open('test.txt', 'w') as f:
f.write(json.dumps(a))
#Now read the file back into a Python list object
with open('test.txt', 'r') as f:
a = json.loads(f.read())
with open ('Sp1.txt', 'a') as outfile:
json.dump (sp1_segments, outfile)
logger.info ("Saved sp_1 segments")
; समस्या है मेरा कार्यक्रम तीन बार चलता है, और तीन रनों से परिणाम गड़बड़ हो रहे हैं। क्या 1-2 रिक्त रेखाओं को जोड़ने का कोई तरीका है ताकि प्रत्येक रन से परिणाम समझ में आएं?
json.dump(sp1_segments + "\n\n", outfile)
?
निम्नलिखित लेखनी () विधि के लिए वाक्यविन्यास है
fileObject.writelines( sequence )
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "rw+")
seq = ["This is 6th line\n", "This is 7th line"]
# Write sequence of lines at the end of the file.
line = fo.writelines( seq )
# Close opend file
fo.close()
file.write('\n'.join(list))
file
चर कैसे मिलेगा ?
यदि आप निम्नानुसार python3 पर हैं, तो आप प्रिंट फ़ंक्शन का भी उपयोग कर सकते हैं।
f = open("myfile.txt","wb")
print(mylist, file=f)
यह तर्क पहले आइटम को सूची में परिवर्तित करेगा string(str)
। कभी-कभी सूची में टपल जैसी होती है
alist = [(i12,tiger),
(113,lion)]
यह तर्क प्रत्येक टपल को एक नई पंक्ति में दर्ज करने के लिए लिखेगा। eval
फ़ाइल को पढ़ते समय हम प्रत्येक टपल को लोड करते समय उपयोग कर सकते हैं :
outfile = open('outfile.txt', 'w') # open a file in write mode
for item in list_to_persistence: # iterate over the list items
outfile.write(str(item) + '\n') # write to the file
outfile.close() # close the file
poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''
f = open('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file
यह कैसे काम करता है: सबसे पहले, बिल्ट-इन ओपन फ़ंक्शन का उपयोग करके by le खोलें और fi le का नाम और उस मोड को निर्दिष्ट करें जिसमें हम। Le को खोलना चाहते हैं। मोड एक रीड मोड ('आर'), राइट मोड ('डब्ल्यू') या एपेंड मोड ('ए') हो सकता है। हम यह भी निर्दिष्ट कर सकते हैं कि क्या हम पाठ मोड ('t') या बाइनरी मोड ('b') में पढ़ रहे हैं, लिख रहे हैं या जोड़ रहे हैं। वास्तव में कई और मोड उपलब्ध हैं और मदद (ओपन) आपको उनके बारे में अधिक जानकारी देगी। डिफ़ॉल्ट रूप से, ओपन (), le को 't'ext opens le मानता है और इसे' r'ead 'मोड में खोलता है। हमारे उदाहरण में, हम use le को टेक्स्ट मोड में लिखते हैं और to le ऑब्जेक्ट के लिखने की विधि का उपयोग fi le पर लिखते हैं और फिर हम। Le को बंद करते हैं।
उपरोक्त उदाहरण स्वरुप C H. swaroopch.com की पुस्तक "ए बाइट ऑफ़ पायथन" से है
writelines
यह नई दर्पण को नहीं जोड़ता क्योंकि यह दर्पण हैreadlines
, जो उन्हें हटाता भी नहीं है।