python read binary file - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: python read binary file (/thread-28221.html) |
python read binary file - Pyguys - Jul-09-2020 as topics. i want to read a binary file. i need some some offset in it and control by big or little endian. but i have problem with it. path_xd = 'xxxxx' pattern = b'\x14\x02' reg_xd=re.compile(pattern) with open(path_xd, 'r+b') as p_xd: data=p_xd.read() for x in reg_xd.finditer(data): offset=x.start() p_xd.seek(offset) data_1402=p_xd.read(16) xd_name=int.from_bytes(data_1402[2:4], byteorder='little') xd_name=(str(xd_name).replace('0', '')).zfill(2) print(xd_name) print(data_1402) print(data_1402[5:9])i get output like this it's how it look like in termial it seems missing some bytes in python output. i want result like this format. for fullfile. seems i have misunderstand something here. need help with file hex output and big/litte endian please advice.thanks.
RE: python read binary file - Pyguys - Jul-12-2020 up. anyone can help? thanks! RE: python read binary file - bowlofred - Jul-12-2020 I don't understand when your output appears. The first one says you get "output like that", and the second one says it's how it looks in the terminal. I would expect your output to be in a terminal. How do you produce the first and how do you produce the second? Do you have an example of the 'xxxxx' file that someone could execute your code against? RE: python read binary file - bowlofred - Jul-12-2020 Looks like at least partly you have a byte string. When printed by default, if the byte maps to an ASCII character (like \x20), then it prints that character. \x20 is a space, so the 20s are removed and replaced with spaces in your printout. If you just need the hex values, you could use (among other things) the hex method. >>> b = b'\x14\x02\x01\x00\x20\x00\x00\x00\x03\x18\x90\x42\x57\x23\x08\x00\x57\x23\x08\x00' >>> b b'\x14\x02\x01\x00 \x00\x00\x00\x03\x18\x90BW#\x08\x00W#\x08\x00' >>> b.hex() '1402010020000000031890425723080057230800'If you want the specific format, you could split it up and add the "\x" in front. >>> h = b.hex() >>> print("".join([f"\\x{h[i:i+2]}" for i,_ in enumerate(h[::2])])) \x14\x40\x02\x20\x01\x10\x00\x02\x20\x00\x00\x00\x00\x00\x00\x00\x03\x31\x18\x89 RE: python read binary file - Pyguys - Jul-13-2020 thanks for your help. |