आप इसे मानव पठनीय/संपादन योग्य होने की जरूरत नहीं है, तो सबसे आसान समाधान सिर्फ pickle
उपयोग करने के लिए है:
मेरे सूचियों निम्नलिखित की तरह डेटा है।
लिखने के लिए:
with open(the_filename, 'wb') as f:
pickle.dump(my_list, f)
पढ़ने के लिए:
with open(the_filename, 'rb') as f:
my_list = pickle.load(f)
तुम क्या हैं जरूरत है उन्हें मानव पठनीय होने के लिए, हमें और जानकारी चाहिए।
तो my_list
सिर्फ उन्हें एक प्रति पंक्ति लिख नहीं एम्बेडेड नई-पंक्तियों के साथ स्ट्रिंग की एक सूची होने की गारंटी है,:
with open(the_filename, 'w') as f:
for s in my_list:
f.write(s + '\n')
with open(the_filename, 'r') as f:
my_list = [line.rstrip('\n') for line in f]
वे बाइट तार के बजाय यूनिकोड तार कर रहे हैं, तो आप करेंगे encode
उन्हें चाहते हैं। (या, बदतर, अगर वे बाइट स्ट्रिंग हैं, लेकिन आपके सिस्टम के डिफ़ॉल्ट के समान एन्कोडिंग में जरूरी नहीं है।)
यदि उनके पास न्यूलाइन, या गैर-प्रिंट करने योग्य वर्ण आदि हो सकते हैं, तो आप भागने या उद्धरण का उपयोग कर सकते हैं । पायथन में stdlib में निर्मित विभिन्न प्रकार के भागने हैं।
के एक बार में ऊपर की समस्याओं का हल करने के लिए दोनों यहाँ unicode-escape
उपयोग करते हैं:
with open(the_filename, 'w') as f:
for s in my_list:
f.write((s + u'\n').encode('unicode-escape'))
with open(the_filename, 'r') as f:
my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f]
तुम भी या तो codecs
मॉड्यूल या साथ, 2.x में 3.x शैली समाधान का उपयोग कर सकते io
मॉड्यूल: *
import io
with io.open(the_filename, 'w', encoding='unicode-escape') as f:
f.writelines(line + u'\n' for line in my_list)
with open(the_filename, 'r') as f:
my_list = [line.rstrip(u'\n') for line in f]
* TOOWTDI, तो जो एक स्पष्ट तरीका है? यह निर्भर करता है ... लघु संस्करण के लिए: यदि आपको 2.6 से पहले पायथन संस्करणों के साथ काम करने की आवश्यकता है, तो codecs
का उपयोग करें; यदि नहीं, io
का उपयोग करें।
मुझे अचार पुस्तकालय पसंद है, यह बहुत प्यारा है और पूरी तरह से काम करता है।मैंने इसे पहले ही कार्यान्वित कर लिया है और ऐसा लगता है कि यह ठीक काम कर रहा है। धन्यवाद, मैं आपको हरे रंग की टिक के रूप में चिह्नित करता हूं जैसे ही यह मुझे देता है। – Ryflex
यूनिकोड-एस्केप ... मुझे टाइपरर की वजह से इसे 'wb' के रूप में खोलना पड़ा: स्ट्रेट होना चाहिए, बाइट्स – rluks
@ Pan.student: आप Python 3.x का उपयोग कर रहे हैं, है ना? पायथन 2 में, यह प्रश्न क्या पूछ रहा था, 'str' और' बाइट्स 'एक ही प्रकार के हैं, और बाइनरी फ़ाइलों और टेक्स्ट फ़ाइलों के बीच का अंतर सिर्फ न्यूलाइन अनुवाद है। पायथन 3 में, 'str' और' यूनिकोड 'एक ही प्रकार के होते हैं, और बाइनरी फ़ाइलों और टेक्स्ट फ़ाइलों के बीच का अंतर यह है कि पाठ फ़ाइलें स्वचालित रूप से आपके लिए एन्कोड और डीकोड करती हैं। (यदि आप io.open' के साथ 3.x-style टेक्स्ट फ़ाइलों सहित सावधान रहें, तो 3.x-like व्यवहार प्राप्त कर सकते हैं, लेकिन पूछताछ ऐसा नहीं कर रहा था।) – abarnert