Schreiben von C-Erweiterungscode, der Daten von einem Python-dateiähnlichen Objekt (z. B. normalen Dateien, StringIO-Objekten usw.) verwendet. read()Die Methode muss wiederholt aufgerufen werden, um Daten für ein dateiähnliches Objekt zu verbrauchen und Schritte zu unternehmen, um die resultierenden Daten ordnungsgemäß zu dekodieren.
Im Folgenden wird eine C-Erweiterungsfunktion angegeben, die lediglich alle Daten eines dateiähnlichen Objekts verbraucht und auf die Standardausgabe ausgibt.

#define CHUNK_SIZE 8192 
  
static PyObject* py_consume_file(PyObject* self, PyObject* args) 
{ 
    PyObject* obj; 
    PyObject* read_meth; 
    PyObject* result = NULL; 
    PyObject* read_args; 
  
    if (!PyArg_ParseTuple(args, "O", &obj)) { 
        return NULL; 
    } 
  
    
    if ((read_meth = PyObject_GetAttrString(obj, "read")) == NULL) { 
        return NULL; 
    } 
  
    
    read_args = Py_BuildValue("(i)", CHUNK_SIZE); 
    while (1) { 
        PyObject* data; 
        PyObject* enc_data; 
        char* buf; 
        Py_ssize_t len; 
  
        
        if ((data = PyObject_Call(read_meth, read_args, NULL)) == NULL) { 
            goto final; 
        } 
  
        
        if (PySequence_Length(data) == 0) { 
            Py_DECREF(data); 
            break; 
        } 
  
        
        if ((enc_data = PyUnicode_AsEncodedString(data, 
             "utf-8", "strict")) == NULL) { 
            Py_DECREF(data); 
            goto final; 
        } 
  
        
        PyBytes_AsStringAndSize(enc_data, &buf, &len); 
  
        
        write(1, buf, len); 
  
        
        Py_DECREF(enc_data); 
        Py_DECREF(data); 
    } 
    result = Py_BuildValue(""); 
  
final: 
    
    Py_DECREF(read_meth); 
    Py_DECREF(read_args); 
    return result; 
}