当我使用以下命令从文件读取字节时
open("file.txt", "rb"")
python在字节的开头和结尾添加[],例如list。
我尝试使用re.sub
手动删除方括号,但是由于它是列表,因此我得到一个错误代码,提示TypeError: expected string or bytes-like object
,因为它是列表。
(我之所以在下面使用f.readlines(0)
而不是仅读取普通文件是因为我在此文件上存储了其他变量)
>>> arsBenZ = os.urandom("128")
>>> print(arsBenZ)
b'\xb9\xfe\xeb\x03e\xe8\x8e\x0c\xc1\x05\xb1\xe8\xadB\x9d\xdf_-\xd2\x8c\x18\xe2\xb2\xc7\xf9I\x18\xa7(\xefe\xc9\xc4:\xb3\x93\n+\x7f\x8e\xd2\x82\xf0!\x9668\x01\xcdf\x0f\x15\xe6r\xec\x01\xb8\x7f\x8d\xa25\xd6yq\x1e#\xfb\x0eY\x0fE\x1a)V\xb2\xcb_\x89yH\xd9\xf9\xc7.\x12\x98\x16\xe4!k\xdfU>\xa2\xf0H\xcbT3.\xbd\xbdn\x8aU<\xeb\xf7\xca\xd6~\xf2R\xca\x0f\x8f\x9d\xce\xd8D\xa6f,H\xf8\xcc\xca\x1f'
>>> f = open("t.text", "wb")
>>> f.write(arsBenZ)
>>> f.close()
>>> f = open("t.text", "rb")
>>> arsBenKelev = f.readlines(0)
>>> print(arsBenKelev)
[b'\xb9\xfe\xeb\x03e\xe8\x8e\x0c\xc1\x05\xb1\xe8\xadB\x9d\xdf_-\xd2\x8c\x18\xe2\xb2\xc7\xf9I\x18\xa7(\xefe\xc9\xc4:\xb3\x93\n', b'+\x7f\x8e\xd2\x82\xf0!\x9668\x01\xcdf\x0f\x15\xe6r\xec\x01\xb8\x7f\x8d\xa25\xd6yq\x1e#\xfb\x0eY\x0fE\x1a)V\xb2\xcb_\x89yH\xd9\xf9\xc7.\x12\x98\x16\xe4!k\xdfU>\xa2\xf0H\xcbT3.\xbd\xbdn\x8aU<\xeb\xf7\xca\xd6~\xf2R\xca\x0f\x8f\x9d\xce\xd8D\xa6f,H\xf8\xcc\xca\x1f\xcc\x96\xaa\x9d\xc5\xebE\xc8\x0b\xe6G"\xb9\xf1T\x80']
如何将其读取为字节而不是列表? (我将其他字节存储在不同的行上,该行存储在第1行,另一个存储在行2。不能将它们存储在不同的文件中。)
编辑:解决方案是这样的:f.read(data_size)。
答案 0 :(得分:1)
arsBenKelev = f.readlines(0)
这只是将所有文件行作为列表读取,大小提示为零(不是很有用)
您只想阅读第一行:
arsBenKelev = next(f)
请注意,如果您的数据是二进制数据,那么“行”的概念将无济于事,因为如果您的数据中有换行符,它将被视为行的结尾。
在这里将会发生,因为您正在写入的数据是随机的。因此,请考虑将数据存储为json或base64编码,以确保换行符不会受到干扰(并且确实如此,请查看您已读取的完整数据,它有2行)
或者记下数据大小,然后使用f.read(data_size)
。知道大小是二进制流的唯一方法。