Unzip all zipped files in a folder to that same folder using Python 2.7.5

前端 未结 4 713
小蘑菇
小蘑菇 2021-01-30 18:15

I would like to write a simple script to iterate through all the files in a folder and unzip those that are zipped (.zip) to that same folder. For this project, I have a folder

相关标签:
4条回答
  • 2021-01-30 18:42

    You need to construct a ZipFile object with the filename, and then extract it:

        zipfile.ZipFile.extract(item)
    

    is wrong.

        zipfile.ZipFile(item).extractall()
    

    will extract all files from the zip file with the name contained in item.

    I think you should more closely read the documentation to zipfile :) but you're on the right track!

    0 讨论(0)
  • 2021-01-30 18:58

    I think this is shorter and worked fine for me. First import the modules required:

    import zipfile, os
    

    Then, I define the working directory:

    working_directory = 'my_directory'
    os.chdir(working_directory)
    

    After that you can use a combination of the os and zipfile to get where you want:

    for file in os.listdir(working_directory):   # get the list of files
        if zipfile.is_zipfile(file): # if it is a zipfile, extract it
            with zipfile.ZipFile(file) as item: # treat the file as a zip
               item.extractall()  # extract it in the working directory
    
    0 讨论(0)
  • 2021-01-30 18:59

    The accepted answer works great!

    Just to extend the idea to unzip all the files with .zip extension within all the sub-directories inside a directory the following code seems to work well:

    import os
    import zipfile
    
    for path, dir_list, file_list in os.walk(dir_path):
        for file_name in file_list:
            if file_name.endswith(".zip"):
                abs_file_path = os.path.join(path, file_name)
    
                # The following three lines of code are only useful if 
                # a. the zip file is to unzipped in it's parent folder and 
                # b. inside the folder of the same name as the file
    
                parent_path = os.path.split(abs_file_path)[0]
                output_folder_name = os.path.splitext(abs_file_path)[0]
                output_path = os.path.join(parent_path, output_folder_name)
    
                zip_obj = zipfile.ZipFile(abs_file_path, 'r')
                zip_obj.extractall(output_path)
                zip_obj.close()
    
    0 讨论(0)
  • 2021-01-30 19:01

    Below is the code that worked for me:

    import os, zipfile
    
    dir_name = 'C:\\SomeDirectory'
    extension = ".zip"
    
    os.chdir(dir_name) # change directory from working dir to dir with files
    
    for item in os.listdir(dir_name): # loop through items in dir
        if item.endswith(extension): # check for ".zip" extension
            file_name = os.path.abspath(item) # get full path of files
            zip_ref = zipfile.ZipFile(file_name) # create zipfile object
            zip_ref.extractall(dir_name) # extract file to dir
            zip_ref.close() # close file
            os.remove(file_name) # delete zipped file
    

    Looking back at the code I had amended, the directory was getting confused with the directory of the script.

    The following also works while not ruining the working directory. First remove the line

    os.chdir(dir_name) # change directory from working dir to dir with files
    

    Then assign file_name as

    file_name = dir_name + "/" + item
    
    0 讨论(0)
提交回复
热议问题