为什么 File.write() 无法处理元组
Why File.write() can't handling the tuple
我正在开发自定义文件粉碎机。
我想在文件中写入元组值字节。
例如:
如果我传递 3 个变量 (0,100,1) # 'b'00, 'b'd, 'b'01
文件大小为 200 字节。
对于 200/3 = 66 次,它将写入所有元组数据。在最后一轮 200%3 = 2 所以它将写入前 2 个元组数据。
当我试图实现它时,它出错了。
当我使用写字节模式时:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
file_current = 0
main_mode = True
while file_current < self.file_size:
if main_mode:
for values in val:
if file_current <= self.file_size:
file.write(values)
file_current += 1
else:
main_mode = False
break
else:
break
当我使用附加字节模式时:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'ab+') as file:
file_current = 0
main_mode = True
file.seek(0)
while file_current < self.file_size:
if main_mode:
for values in val:
if file_current <= self.file_size:
file.write(values)
file_current += 1
else:
main_mode = False
break
else:
break
我的结果是:
当运行写字节模式
当运行追加字节模式时
要求的结果
我到处搜索,仍然找不到错误发生的地方的答案。
代码的简化
如果我们定义一个辅助函数,returns 循环元组中的数据:
def cyclic_iter(values):
while True:
for v in values:
yield v
那么代码可以简单地变成:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
generator = cyclic_iter(val)
for _ in range(self.file_size):
file.write(next(generator))
或者可以利用 zip
函数:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
for _, value in zip(range(self.file_size), cyclic_iter(val)):
file.write(value)
编辑:最简单的方法
既然你提到你刚刚开始 python 我会添加我知道的最简单的方法。
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
for i in range(self.file_size):
file.write(val[i % len(val))
我正在开发自定义文件粉碎机。
我想在文件中写入元组值字节。
例如: 如果我传递 3 个变量 (0,100,1) # 'b'00, 'b'd, 'b'01 文件大小为 200 字节。 对于 200/3 = 66 次,它将写入所有元组数据。在最后一轮 200%3 = 2 所以它将写入前 2 个元组数据。 当我试图实现它时,它出错了。
当我使用写字节模式时:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
file_current = 0
main_mode = True
while file_current < self.file_size:
if main_mode:
for values in val:
if file_current <= self.file_size:
file.write(values)
file_current += 1
else:
main_mode = False
break
else:
break
当我使用附加字节模式时:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'ab+') as file:
file_current = 0
main_mode = True
file.seek(0)
while file_current < self.file_size:
if main_mode:
for values in val:
if file_current <= self.file_size:
file.write(values)
file_current += 1
else:
main_mode = False
break
else:
break
我的结果是:
当运行写字节模式
我到处搜索,仍然找不到错误发生的地方的答案。
代码的简化
如果我们定义一个辅助函数,returns 循环元组中的数据:
def cyclic_iter(values):
while True:
for v in values:
yield v
那么代码可以简单地变成:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
generator = cyclic_iter(val)
for _ in range(self.file_size):
file.write(next(generator))
或者可以利用 zip
函数:
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
for _, value in zip(range(self.file_size), cyclic_iter(val)):
file.write(value)
编辑:最简单的方法
既然你提到你刚刚开始 python 我会添加我知道的最简单的方法。
def multiple_writer(self, val:tuple):
with open(self.file_path, 'wb+') as file:
for i in range(self.file_size):
file.write(val[i % len(val))