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

时间:2017-10-31 02:06:19

标签: python for-loop zip

我确定可能有更好的方法来执行此操作,但我正在尝试遍历目录并将每50个文件压缩在一起。它适用于大多数文件,但是当它到达最后49个文件时会混乱。

我想告诉它仍然将这49个文件压缩在一起。

这是我的代码:

UserDefaults

3 个答案:

答案 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)