Чтение нескольких CSV-файлов в одном файле - PullRequest
0 голосов
/ 27 июня 2019

У меня есть несколько csv-файлов в нескольких zip-файлах в папке, например:

  • A.zip (содержит csv1, csv2, csv3)
  • B.zip (содержит csv4, csv5, csv6)

, которые находятся в пути к папке C:/Folder/, когда я загружаю обычные файлы csv в папку, я использую следующий код:

import glob
import pandas as pd
files = glob.glob("C/folder/*.csv")
dfs = [pd.read_csv(f, header=None, sep=";") for f in files]

df = pd.concat(dfs,ignore_index=True)

с последующим сообщением: Чтение файлов в формате csv в формате zip

Один CSV в формате zip работает следующим образом:

import pandas as pd
import zipfile

zf = zipfile.ZipFile('C:/Users/Desktop/THEZIPFILE.zip') 
df = pd.read_csv(zf.open('intfile.csv'))

Есть идеи, как оптимизировать этот цикл для меня?

Ответы [ 2 ]

3 голосов
/ 27 июня 2019

Используйте zip.namelist(), чтобы получить список файлов внутри zip

Ex:

import glob
import zipfile
import pandas as pd

for zip_file in glob.glob("C/folder/*.zip"):
    zf = zipfile.ZipFile(zip_file)
    dfs = [pd.read_csv(zf.open(f), header=None, sep=";") for f in zf.namelist()]
    df = pd.concat(dfs,ignore_index=True)
    print(df)
1 голос
/ 27 июня 2019

Я бы попытался заняться этим в два прохода. Первым делом извлеките содержимое zip-файла в файловую систему. Второй проход, прочитайте все эти извлеченные CSV, используя метод, который вы уже использовали выше:

import glob
import pandas as pd
import zipfile

def extract_files(file_path):
  archive = zipfile.ZipFile(file_path, 'r') 
  unzipped_path = archive.extractall()
  return unzipped_path

zipped_files = glob.glob("C/folder/*.zip")]
file_paths = [extract_files(zf) for zf in zipped_files]

dfs = [pd.read_csv(f, header=None, sep=";") for f in file_paths]
df = pd.concat(dfs,ignore_index=True)
...