簡體   English   中英

使用python zipfile不產生嵌套文件夾內的文件

[英]Not yielding files inside nested folders using python zipfile

解決了,檢查標記的答案似乎用 os.walk()標記的答案執行得更快。

(Python 3.8,zipfile 模塊,Windows 10 Anaconda)

我正在使用 python 的zipfile模塊來創建我的文件夾的 Zip 文件。

我的文件夾是 D:/Personals。 個人的os.listdir產生 2 個文件夾和 171 個文件。 當我檢查 zip 時,它包含文件夾的所有 171 個文件和 2 個內部嵌套文件夾。 但是內部嵌套文件夾是空的,盡管每個文件夾都包含許多單獨的文件。 這是我的代碼。

from zipfile import ZipFile 
from os import listdir 

dir_path = 'D:/Personals'
export_path = 'D:/Zipper'

items_list = listdir(dir_path)
zipper = ZipFile(export_path+'/S1.zip','w')

for item in items_list:
    zipper.write(dir_path+'/'+item)

zipper.close()

它已生成文件夾內的所有文件,但未能返回 2 個嵌套文件夾內的文件。 請告知我該怎么辦?

提前謝謝了。

使用 ZipFile 模塊壓縮文件夾時,您必須使用遞歸來包含子文件夾。

試試這個代碼:

from zipfile import ZipFile 
from os import listdir, path

dir_path = 'D:/Personals'  # root folder to zip
export_path = 'D:/Zipper'  # target folder for zip file

items_list = listdir(dir_path)
zipper = ZipFile(export_path+'/S1.zip','w')

def addzipitems(zipper, folder):  # single folder
    for item in listdir(folder):  # each item (file or folder)
        zipper.write(folder+'/'+item)  # add item to zip (for folder, will add empty)
        if path.isdir(folder +'/'+item):  # if item is subfolder
            addzipitems(zipper, folder +'/'+item)   # process subfolder

addzipitems(zipper, dir_path)  # start at root folder
zipper.close()

您還可以使用os.walk來獲取目錄樹中的所有文件。 不需要遞歸。

from zipfile import ZipFile 
from os import listdir, path, walk

dir_path = 'D:/Personals'  # root folder to zip
export_path = 'D:/Zipper'  # target folder for zip file

zipper = ZipFile(export_path+'/S1.zip','w')

for path, directories, files in walk(dir_path): # all folders\files in tree
    for f in files:  # files is list
        zipper.write(path+'/'+f)

zipper.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM