Home > Net >  cannot write bytes to gif file (python)
cannot write bytes to gif file (python)

Time:08-07

I'm working on a project that involves taking a stream of bytes and assembling them into a .gif file.

my class for creating a file and writing to it is this:

class fileAdd():
    def create_file(self, input):
        self.filepath = pathlib.Path('gifs/'   input)
        self.fp = open(self.filepath, 'ab')
        print("file created")
    def add_data(self, input):
        self.fp.write(input)
        print("adding data")
    def close(self):
        self.fp.close()

here create_file() takes a filename extension and creates/opens the file. then, add_data() is repeatedly called to add raw binary data to the file in 140 byte chunks. finally, close() is called to close the file.

here's the problem: add_data() never gets past self.fp.write(), "adding data" never gets printed, and close() doesn't seem to work at all either. this is not an issue with the code calling these functions. if I delete self.fp.write() it prints out "adding data"

why does this happen and how can I fix it?

TIA, Auri.

CodePudding user response:

I am going to take a guess that you are attempting to directly call the functions and have not created an object from your class and then called the functions via your object. Following is a snippet of code I wrote using your class and functions that did pump out data to a binary file.

import pathlib

class fileAdd():
    def create_file(self, input):
        self.filepath = pathlib.Path('gifs/'   input)
        self.fp = open(self.filepath, 'ab')
        print("file created")
    def add_data(self, input):
        self.fp.write(input)
        print("adding data")
    def close(self):
        self.fp.close()

x = b'\x00\x00\x00'

fpx = fileAdd()

fpx.create_file("GIF")

fpx.add_data(x)

fpx.close()

Following is the sample output to the file called "GIF".

@Una:~/Python_Programs/File/gifs$ hexdump GIF
0000000 6548 6c6c 006f 0000                    
0000008

Give that a try and see if that moves you forward.

  • Related