【问题标题】:How to merge all csv files in a specific folder using python and os如何使用python和os合并特定文件夹中的所有csv文件
【发布时间】:2020-10-30 15:47:21
【问题描述】:

如何使用 os 合并特定文件夹中的所有 csv 文件。

所以下面的代码可以完成工作,但它将所有文件连接到脚本所在的同一目录中。

如何在不同的文件夹中使用它?

我的代码:

import os
import pandas as pd
import numpy as np



def get_df():
    df=pd.DataFrame()
    for file in os.listdir():
        if file.endswith('.csv'):
            aux=pd.read_csv(file, error_bad_lines=False)
            df=df.append(aux)
    return df


df=get_df()


df.to_csv(f"file_name.csv")

我尝试添加文件夹名称,但没有找到文件。

for file in os.listdir('My_folder_name\'):

【问题讨论】:

  • 必须在python中吗?或者会 bash 工作:cat *.csv > all_files.csv
  • @JD Fries,需要python,因为所有代码库都在jupyter notebook中,合并文件是锦上添花
  • 您的脚本可能没有在您的文件所在的目录中运行,尝试打印出os.getcwd() 以查看它从哪里运行,或者使用listdir() 中的完整路径
  • @JDFrias,确切地说。因此,如果文件位于同一目录中,则代码将起作用。所以目标是访问不同目录/文件夹中的文件
  • 我看到您在示例中使用了反斜杠,可能是窗口路径问题?尝试os.path.join()pathlib 构建路径,或者使用正斜杠/ 不是最好的方法。

标签: python csv merge operating-system merge-file


【解决方案1】:

我在 os 模块文档中找到了更改目录 os.chdir("C:\\Users\\Desktop\\my_folder_name\\my_new_folder_name") 的代码。

https://www.tutorialsteacher.com/python/os-module

所以我只是在循环之前添加了这一行,现在它可以工作了!!

def get_df():
    df=pd.DataFrame()
    os.chdir("C:\\Users\\Desktop\\my_folder_name\\my_new_folder_name")
    for file in os.listdir():
        if file.endswith('.csv'):
            aux=pd.read_csv(file, error_bad_lines=False)
            df=df.append(aux)
    return df


df=get_df()

df.to_csv(f"file_name.csv")

【讨论】:

  • 这行得通吗? os.listdir("C:\\Users\\Desktop\\my_folder_name\\my_new_folder_name")
【解决方案2】:

有多种解决方法,具体取决于想要进行的合并类型。

考虑到您的具体要求(Pythonos),并假设您想要 concat 文件,以下将完成工作(包括具有相同标题的文件)

import os

os.system("awk '(NR == 1) || (FNR > 1)' file*.csv > merged.csv")

其中NRFNR 表示正在处理的行号。

FNR 是每个文件中的当前行。

NR == 1 包括第一个文件的第一行(标题),而 (FNR > 1) 跳过每个后续文件的第一行。

【讨论】:

    猜你喜欢
    • 2022-07-28
    • 2021-02-07
    • 1970-01-01
    • 2020-11-28
    • 2022-12-07
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多