VOOZH about

URL: https://www.geeksforgeeks.org/python/reading-python-file-like-objects-from-c-python/

⇱ Reading Python File-Like Objects from C | Python - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Reading Python File-Like Objects from C | Python

Last Updated : 7 Jun, 2019
Writing C extension code that consumes data from any Python file-like object (e.g., normal files, StringIO objects, etc.). read() method has to be repeatedly invoke to consume data on a file-like object and take steps to properly decode the resulting data. Given below is a C extension function that merely consumes all of the data on a file-like object and dumps it to standard output. Code #1 : A file-like object such as a StringIO instance is prepared to test the code and then it is passed in: Code #2 : Output :
Hello
World
Unlike a normal system file, a file-like object is not necessarily built around a low-level file descriptor. Thus, a normal C library functions can't be used to access it. Instead, a Python’s C API is used to manipulate the file-like object much like you would in Python. So, the read() method is extracted from the passed object. An argument list is built and then repeatedly passed to PyObject_Call() to invoke the method. To detect end-of-file (EOF), PySequence_Length() is used to see if the returned result has zero length. For all I/O operations, the concern is underlying encoding and distinction between bytes and Unicode. This recipe shows how to read a file in text mode and decode the resulting text into a bytes encoding that can be used by C. If the file is read in binary mode, only minor changes will be made as shown in the code below. Code #3 :
Comment
Article Tags:
Article Tags: