मैं पायथन में एक फ़ाइल में स्ट्रिंग कैसे लपेटता हूं?


85

मैं एक स्ट्रिंग की सामग्री के साथ फ़ाइल जैसी ऑब्जेक्ट (फ़ाइल के रूप में एक ही प्रकार) कैसे बना सकता हूं?

जवाबों:


121

पायथन 2.x के लिए, स्ट्रिंगो मॉड्यूल का उपयोग करें । उदाहरण के लिए:

>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'

मैं cStringIO (जो तेज है) का उपयोग करता हूं, लेकिन ध्यान दें कि यह यूनिकोड स्ट्रिंग्स को स्वीकार नहीं करता है जो सादे ASCII स्ट्रिंग्स के रूप में एन्कोड नहीं किया जा सकता है । (आप "स्ट्रिंग से cStringIO" से "स्ट्रिंग से" बदलकर स्विच कर सकते हैं।)

पायथन 3.x के लिए, ioमॉड्यूल का उपयोग करें ।

f = io.StringIO('foo')

1
अब cStringIO का उपयोग करने का एक कारण है: cStringIO यूनिकोड स्ट्रिंग्स का समर्थन नहीं करता है।
आर्मिन रौनाकर

6
मुझे लगता है कि एक बेहतर विचार यह है कि 'StringIO के रूप में cStringIO आयात करें'। इस तरह यदि आपको किसी भी कारण से शुद्ध अजगर के कार्यान्वयन पर स्विच करने की आवश्यकता है, तो आपको केवल एक पंक्ति को बदलने की आवश्यकता है ..
जॉन फोहे

यह Python2.7 के लिए भी काम करता है, io.StringIO(u'foo')मैं भी इसका इस्तेमाल
करूंगा

29

पायथन 3.0 में:

import io

with io.StringIO() as f:
    f.write('abcdef')
    print('gh', file=f)
    f.seek(0)
    print(f.read())

1
@ABB स्वीकार किए जाते हैं जवाब पहले से ही इस तरह के उपयोग से पता चलता है। मेरा जवाब पूरक है: यह with-statement को दर्शाता है और लिखता है, प्रिंट करता है, तलाश करता है, पढ़ता है।
12

6

यह Python2.7 और Python3.x के लिए काम करता है:

io.StringIO(u'foo')

5

यदि आपकी फ़ाइल जैसी ऑब्जेक्ट में बाइट्स होने की उम्मीद है, तो स्ट्रिंग को पहले बाइट्स के रूप में एन्कोड किया जाना चाहिए, और उसके बाद बाइट्सियो ऑब्जेक्ट का उपयोग किया जा सकता है। पायथन 3 में:

from io import BytesIO

string_repr_of_file = 'header\n byline\n body\n body\n end'
function_that_expects_bytes(BytesIO(bytes(string_repr_of_file,encoding='utf-8')))

2

दो अच्छे जवाब। मैं थोड़ा ट्रिक जोड़ूंगा - अगर आपको एक वास्तविक फ़ाइल ऑब्जेक्ट की आवश्यकता है (कुछ तरीके एक की अपेक्षा करते हैं, न कि केवल एक इंटरफ़ेस), तो यहां एक एडेप्टर बनाने का एक तरीका है:


"पेज नहीं मिला" - rfk.id.au/software/projects/filelike/api/filelike.htm
jfs

2
अब (7 साल बाद?) वापस आने लगता है
एथन फुरमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.