我确定可能有更好的方法来执行此操作,但我正在尝试遍历目录并将每50个文件压缩在一起。它适用于大多数文件,但是当它到达最后49个文件时会混乱。
我想告诉它仍然将这49个文件压缩在一起。
这是我的代码:
UserDefaults
答案 0 :(得分:0)
我认为你需要在最后一个循环结束后(循环外)需要更多代码,如:
if len(zip_list) > 0:
name_count += 1
with ZipFile('zip' + str(name_count), 'w') as myzip:
for f in zip_list:
myzip.write(f)
答案 1 :(得分:0)
如果我正确理解了这个问题,这里有一个不同的方法:
import os
from zipfile import ZipFile
from os import walk
current_directory = os.getcwd()
total = 0
cnt = 0
zip_list = []
name_count = 0
file_names = os.listdir(current_directory)
file_count = len(os.listdir(current_directory))
while cnt<file_count:
zip_list = []
if file_count-cnt>49:
zip_list = file_names[cnt:cnt+50]
cnt = cnt+50
else:
zip_list = file_names[cnt:]
cnt = file_count
name_count +=1
with ZipFile('zip'+str(name_count), 'w') as myzip:
print zip_list
for f in zip_list:
myzip.write(f)
答案 2 :(得分:0)
如果您只需要列表中的50-50个块,那么您不需要太多的跟踪变量,然后只需将所有文件附加到列表中,然后将其拆分为相同大小的50个块:
for item in range(0,len(zip_list),50):
chunks.append(zip_list[item:item+50])
for index,chunk_1 in enumerate(chunks):
with ZipFile(str(index) + '.zip', 'w') as myzip:
for files in chunk_1:
myzip.write(files)
代码的修改版本:
import os
from zipfile import ZipFile
from os import walk
current_directory = os.getcwd()
zip_list = []
chunks=[]
for f in os.listdir(current_directory):
if f.endswith('Z'):
zip_list.append(f)
for item in range(0,len(zip_list),50):
chunks.append(zip_list[item:item+50])
for index,chunk_1 in enumerate(chunks):
with ZipFile(str(index) + '.zip', 'w') as myzip:
for files in chunk_1:
myzip.write(files)