У меня есть разные ZIP-файлы, которые содержат один CSV-файл каждый. Как мне разархивировать каждую папку и сохранить все файлы CSV в одной папке - PullRequest
0 голосов
/ 24 июня 2019

Коды, которые я написал, по некоторым причинам не работает.

import pandas as pd
import glob
import zipfile

path = r"C:/Users/nano/Documents/Project" # use your path
all_files = glob.glob(path + "/*.gz")

for folder in all_files:
    with zipfile.ZipFile(folder,"r") as zip_ref:
        zip_ref.extractall(path)

Ответы [ 4 ]

1 голос
/ 24 июня 2019

gzip (.gz) и zip (.zip) - две разные вещи.Для gzip вы можете использовать gzip:

import glob
import gzip
import shutil

path = r"C:/Users/shedez/Documents/Project" # use your path
all_files = glob.glob(path + "/*.gz")

for folder in all_files:
     dst=folder[:-3] # destination file name
     with gzip.open(folder, 'rb') as f_in, open(dst, 'wb') as f_out:
         shutil.copyfileobj(f_in, f_out)
1 голос
/ 24 июня 2019

Сначала вы используете Zip против Gzip. Поэтому вам нужно использовать правильную библиотеку. Ниже приведен рабочий пример кода.

import glob
import os
import gzip

path = r"C:/Temp/Unzip" # use your path
all_files = glob.glob(path + "/*.gz")
print(all_files)
for file in all_files:
    path, filename = os.path.split(file)
    filename = os.path.splitext(filename)[0]
    with gzip.open(file,"rb") as gz:
        with open('{0}/{1}.csv'.format(path, filename), 'wb') as cv:
            cv.writelines(gz.read())
0 голосов
/ 24 июня 2019

Если вы используете формат gz (gZip), вы можете захотеть взглянуть на пакет gzip, я не знаю о методе извлечения, но вы можете сделать что-то как таковое, используя чисто панд, что я нахожу больше удобно:

for folder in all_files:
    c = pd.read_csv(folder, compression='gzip')
    c.to_csv(path+folder[:-2]+"csv")

[: -2] предназначен для обрезки "gz", и вы можете изменить параметры read_csv (добавить строку заголовка или что-то еще) или флаги to_csv (установить аргументы header=False, index_label=False для предотвращения панда добавляя вам нежелательные вещи

альтернативно, вы можете открыть его с помощью gzip

import gzip
import shutil
with open(folder, 'rb') as f_in, gzip.open(folder[:-2]+"csv", 'wb') as f_out:
    shutil.copyfileobj(f_in, f_out)
0 голосов
/ 24 июня 2019

Попробуйте этот код:

import os, zipfile

dir_name = 'C:\\Users\\shedez\\Documents\\Project' # ZIP location
extract_dir_name = 'C:\\Users\\shedez\\Documents\\Project\\Unziped' # CSV location after unzip
extension = ".zip" # you might have to change this

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(extract_dir_name) # extract file to dir
        zip_ref.close() # close file

Если вы хотите узнать больше о zipFile , нажмите здесь .

...