【问题标题】:How to read all csv files in multiple zip files?如何读取多个 zip 文件中的所有 csv 文件?
【发布时间】:2020-10-21 07:53:43
【问题描述】:

我有一个包含许多 zip 文件的文件夹,这些 zip 文件中有多个 csv 文件。 有没有办法在 python 的一个数据框中获取所有 .csv 文件? 或者我可以通过任何方式传递 zip 文件列表?

我目前正在尝试的代码是:

import glob
import zipfile
import pandas as pd

for zip_file in glob.glob(r"C:\Users\harsh\Desktop\Temp\data_00-01.zip"):
    # This is just one file. There are multiple zip files in the folder
    zf = zipfile.ZipFile(zip_file)
    dfs = [pd.read_csv(zf.open(f), header=None, sep=";", encoding='latin1') for f in zf.namelist()]
    df = pd.concat(dfs,ignore_index=True)
    print(df)

此代码适用于一个 zipfile,但我的文件夹中有大约 50 个 zip 文件,我想在一个数据帧中读取并连接这些 zip 文件中的所有 csv 文件。

谢谢

【问题讨论】:

标签: python pandas glob zipfile


【解决方案1】:

以下代码应满足您的要求(只需根据您的需要编辑dir_name):

import glob
import zipfile
import pandas as pd

dfs = []
for filename in os.listdir(dir_name):
    if filename.endswith('.zip'):
        zip_file = os.path.join(dir_name, filename)
        zf = zipfile.ZipFile(zip_file)
        dfs += [pd.read_csv(zf.open(f), header=None, sep=";", encoding='latin1') for f in zf.namelist()]
df = pd.concat(dfs,ignore_index=True)

【讨论】:

  • 代码仍然只读取 1 个 zip 文件。我应该在 dfs = [] 中列出 zip 文件名吗?另外我会在哪里提供文件夹的路径?
  • 我用os.listdir(r"C:\Users\harsh\Desktop\Temp") 替换了os.listdir(dir_name),我收到了这个错误FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\harsh\\AppData\\Roaming\\JetBrains\\PyCharmCE2020.2\\scratches\\data_00-01.zip'。我该如何解决?
  • 太棒了!现在可以了。我看到了我的错误。但是,现在,我得到一列,其中包含数据框中的所有值,没有标题。有没有办法让数据框根据列标题和相应的值进行格式化?谢谢
  • 你能提供当前的输出,和预期的输出吗?
  • 当然!请找到当前输出 here 和预期输出文件 here 。预期的输出在"C:\Users\harsh\Desktop\Temp\data_19-20.zip" 文件中
猜你喜欢
  • 2018-02-23
  • 2021-07-05
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多