我正在开发自定义文件粉碎机。
我想在文件中写入元组值字节。
例如: 如果我传递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
我的结果是:
我仍然搜索无处不在,但仍找不到发生错误的答案。
如果我们定义一个辅助函数,该函数周期性地返回元组中的数据:
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))
感谢您的帮助,因为我是该社区和python语言的新手,并且正在从事我的第一个项目。所以我试图找到答案,但我找不到。
没问题!Python确实很简单,但要花一些时间来学习所有细微差别。祝你好运!
file.seek(0)
和file.seek(0, 0)
是等价的,因为你所引用的文件中解释。糟糕,您是对的