在Python中循环遍历一个目录并将每50个文件压缩到一起

在Python中循环遍历一个目录并将每50个文件压缩到一起,python,for-loop,zip,Python,For Loop,Zip,我相信可能有更好的方法来实现这一点,但我正在尝试循环遍历一个目录,并将每50个文件压缩到一起。它适用于大多数文件,但在最后49个文件时会出错 我想告诉它还是把这49个文件压缩在一起 如果我的代码是: import os from zipfile import ZipFile from os import walk current_directory = os.getcwd() total = 0 cnt = 0 zip_list = [] name_count = 0 for f in

我相信可能有更好的方法来实现这一点,但我正在尝试循环遍历一个目录,并将每50个文件压缩到一起。它适用于大多数文件,但在最后49个文件时会出错

我想告诉它还是把这49个文件压缩在一起

如果我的代码是:

import os 
from zipfile import ZipFile
from os import walk

current_directory = os.getcwd()
total = 0
cnt = 0
zip_list = []
name_count = 0 

for f in os.listdir(current_directory)
    total+=1

for f in os.listdir(current_directory):
    cnt+=1

    if f.endswith('Z') and len(zip_list) <= 50:
        zip_list.append(f)

        if len(zip_list) == 50:
            name_count+=1
            with ZipFile('zip'+str(name_count), 'w') as myzip:
                for f in zip_list:
                    myzip.write(f)
            del zip_list[:]     

我认为,在循环外的最后一个循环结束后,您只需要多一点代码,如:

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)

如果我正确理解了这个问题,这里有一个不同的方法:

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)

您不需要太多的跟踪变量,如果您只需要列表中的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)
代码的修改版本:


问题是什么?。请花点时间阅读它所包含的链接。你应该花一些时间来练习这些例子。它将向您介绍Python提供的工具,您甚至可以开始获得解决问题的想法。
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)