读取多个压缩成一个文件的csv文件

时间:2019-06-27 07:44:54

标签: python pandas csv zip

我的文件夹中的多个zip文件中包含多个csv文件,例如:

  • 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)

此帖子之后:Reading csv zipped files in python

一个zip中的csv的工作方式如下:

import pandas as pd
import zipfile

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

有什么想法可以为我优化此循环吗?

2 个答案:

答案 0 :(得分:3)

使用zip.namelist()获取zip内的文件列表

例如:

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 :(得分:1)

我会尝试通过两个途径解决它。首先,将zipfile的内容提取到文件系统中。第二次通过,使用上面已经有的方法读取所有提取的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)