Source code for pysparkling.fileio.textfile

from __future__ import absolute_import, unicode_literals

import logging
from io import BytesIO, StringIO, TextIOWrapper

from . import codec
from .file import File
from .fs.file_system import FileSystem

log = logging.getLogger(__name__)

# there is no basestring in Python 3, so define string_types:
try:
    string_types = basestring
except NameError:
    string_types = str


[docs]class TextFile(File): """Derived from :class:`File`. :param file_name: Any text file name. """ def __init__(self, file_name): super(TextFile, self).__init__(file_name)
[docs] def load(self, encoding='utf8', encoding_errors='ignore'): """Load the data from a file. :param str encoding: The character encoding of the file. :param str encoding_errors: How to handle encoding errors. :rtype: io.StringIO """ if type(self.codec) == codec.Codec and \ self.fs.load_text != FileSystem.load_text: stream = self.fs.load_text(encoding, encoding_errors) else: stream = self.fs.load() stream = self.codec.decompress(stream) stream = TextIOWrapper(stream, encoding, encoding_errors) return stream
[docs] def dump(self, stream=None, encoding='utf8', encoding_errors='ignore'): """Writes a stream to a file. :param stream: An ``io.StringIO`` instance. A ``basestring`` is also possible and get converted to ``io.StringIO``. :param encoding: (optional) The character encoding of the file. :rtype: TextFile """ if stream is None: stream = StringIO() if isinstance(stream, string_types): stream = StringIO(stream) stream = self.codec.compress( BytesIO(stream.read().encode(encoding, encoding_errors)) ) self.fs.dump(stream) return self