在Python中循环遍历一个目录并将每50个文件压缩到一起
我相信可能有更好的方法来实现这一点,但我正在尝试循环遍历一个目录,并将每50个文件压缩到一起。它适用于大多数文件,但在最后49个文件时会出错 我想告诉它还是把这49个文件压缩在一起 如果我的代码是:在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
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)