读取一个压缩文件中多个CSV文件的内容

3

我有一个文件夹里面有几个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)

跟随这篇文章:在Python中读取压缩的 CSV 文件,一个 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
ZipFile.namelist()应该会给你一个包含.zip文件内所有文件的列表,因此你可以在for-loop中使用这个列表来读取.zip中的.csv文件。 - furas
2个回答

7

使用 zip.namelist() 获取压缩文件中的文件列表。

例:

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)

我有多个Zip文件,不只一个。 - PV8
1
在这种情况下,首先只需循环压缩文件列表即可? - Rakesh

1
我会尝试分两步解决它。第一步,将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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接