【问题标题】:Merge csv files with same name from multiple subfolders合并多个子文件夹中同名的 csv 文件
【发布时间】:2019-05-09 22:34:25
【问题描述】:

我的文件夹中有 csv 文件,我想读取这些文件并将这些文件合并到一个 csv 中。

文件夹 A 有 2 个子文件夹 B 和 C , B 和 C 有其他子文件夹, csv 文件在最后一个子文件夹中。

这是文件夹图:

【问题讨论】:

  • 也许这可以帮助你:stackoverflow.com/questions/21040578/…
  • @mzze 它只是简单地组合 csv 文件,我的问题是如何从多个子文件夹、3 层文件夹和 csv 文件在第 3 层中读取和合并 csv 文件

标签: python-3.x pandas


【解决方案1】:

您可以使用globpandas.concat

import glob
import pandas as pd

files = glob.glob("A/*/*/*.csv")
df = pd.concat([pd.read_csv(f) for f in files])

df.to_csv("merged.csv")

【讨论】:

    【解决方案2】:

    您可以使用os.walkos.walk 给你一个元组列表,元组的最后一部分代表当前目录中的所有文件名。

    import os
    path = os.path.join('path', 'to', 'directory')
    files = [os.path.join(path,file) for dir, dir_name, file_list in os.walk(path) for file in file_list]
    

    复杂的列表理解基本上就是:

    # unpack the tuple into dir, dir_name, file_list
    
    files = []
    for dir, dir_name, file_list in os.walk(path):
        for file in file_list:
            files.append(os.path.join(path,file))
    

    然后像这样使用pd.concat

    import pandas as pd
    
    combined_df = pd.concat([pd.read_csv(file) for file in files])
    

    【讨论】:

    • path = os.path.join('path', 'to', 'directory') ,我需要更改路径和目录吗?
    • 只需插入以逗号分隔的目录,如os.path.join('C', 'Users','Documents','Projects')os.path.join 将创建一个系统可以理解的路径(除了你拥有的操作系​​统之外,它会改变)
    • 附加“文件”后只有所有 csv 文件的名称列表。但是当尝试 pd.concat 它给出错误时,EmptyDataError: No columns to parse from file
    • 好吧,EmptyDataError 表示 csv 里面不包含任何数据
    • 所有文件都有数据。此代码仅读取文件名而不读取文件数据
    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多