Python:将文本文件转换为二进制文件

3
我们可以将任何数字文件转换为二进制文件。
我有一个1MB的文本文件,
我想将它转换成二进制字符串,并将输出作为二进制数和反之亦然,
换句话说,如果我有二进制数,我想将其转换为文本文件。
如何在Python中实现这一点?是否有标准的方法来做到这一点?
现在在这个论坛上有一些帖子(1,2,3, 4),但没有一个能够恰当地回答我的问题。

1
https://dev59.com/BGMk5IYBdhLWcg3w8ieC - Michael
这个回答解决了你的问题吗?Python读取文本文件作为二进制文件? - user10750522
请查看此线程:https://dev59.com/62ox5IYBdhLWcg3w3X5S - user10750522
1
问题似乎是有效的;只是需要用不同的措辞,以便于技术人员理解并回答它。 - Zimba
我可以用其他语言回答,但问题需要使用Python,所以我必须用Python回来。 - Zimba
显示剩余3条评论
2个回答

1
所提到的“文本文件”似乎是指ASCII文件(其中每个字符占用8位空间)。
第二行中的“将其转换为二进制字符串”可能意味着将文本文件转换为ASCII表示形式,给出一系列字节以“输出为二进制数”(类似于公钥加密,其中在加密之前将文本转换为数字),例如。
text = 'ABC '
for x in text:
  print(format(ord(x), '08b'), end='')

会给出二进制(数字)字符串:01000001010000100100001100100000
其十进制为:1094861600

第三行的意思是将二进制数(字节)序列化并显示相应的ASCII字符(对于每个8位序列),例如0x41将被替换为'A'(作为输出)。 (这里的假设是每个数字都将映射到可打印的ASCII即文本字符,并且给定的二进制数具有8位数字的倍数)。

例如,要反转(将二进制数转换为文本):

binary = "01000001010000100100001100100001"
#number of characters in text
num = len(binary)/8 

for x in range(int(num)):
  start = x*8
  end = (x+1)*8
  print (chr(int(str(binary[start:end]),2)), end='')
print()

将会输出文本:ABC!

对于一个1MB的文本文件,您可以将文本字符串分割成您的机器可以处理的块,如32位(在转换之前)

已在Python IDE中进行了测试


0

请参阅https://docs.python.org/3/library/codecs.html#standard-encodings以获取标准字符串编码列表,因为转换取决于编码。

这些函数将帮助在字节/整数和字符串之间进行转换,默认为UTF-8。

提供的示例使用UTF-8中的Hangul字符“한”。


def bytes_to_string(byte_or_int_value, encoding='utf-8') -> str:
    if isinstance(byte_or_int_value, bytes):
        return byte_or_int_value.decode(encoding)
    if isinstance(byte_or_int_value, int):
        return chr(byte_or_int_value).encode(encoding).decode(encoding)
    else: 
        raise ValueError('Error: Input must be a bytes or int type')

def string_to_bytes(string_value, encoding='utf-8') -> bytes:
    if isinstance(string_value, str):
        return bytes(string_value.encode(encoding))
    else: 
        raise ValueError('Error: Input must be a string type')

int_value = 54620
bytes_value = b'\xED\x95\x9C'
string_value = '한'

assert bytes_to_string(int_value) == string_value
assert bytes_to_string(bytes_value) == string_value
assert string_to_bytes(string_value) == bytes_value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接