Объединение файлов CSV с помощью Python

#python #csv

#python #csv

Вопрос:

Я начинаю изучать Python и хотел бы объединить CSV-файлы. Я нашел следующий код :

 from os import chdir
from glob import glob
import pandas as pdlib

# Produce a single CSV after combining all files
def produceOneCSV(list_of_files, file_out):
   # Consolidate all CSV files into one object
   result_obj = pdlib.concat([pdlib.read_csv(file) for file in list_of_files])
   # Convert the above object into a csv file and export
   result_obj.to_csv(file_out, index=False, encoding="utf-8")

# Move to the path that holds our CSV files
csv_file_path = 'c:/Users/user/Desktop/DUT1'
chdir(csv_file_path)

# List all CSV files in the working dir
file_pattern = ".csv"
list_of_files = [file for file in glob('*.{}'.format(file_pattern))]
print(list_of_files)

file_out = "ConsolidateOutput.csv"
produceOneCSV(list_of_files, file_out)
  

Но я получаю эти ошибки, когда пытаюсь его скомпилировать :

 Traceback (most recent call last):
  File "C:UsersuserDesktopDUT1test.py", line 26, in <module>
    produceOneCSV(list_of_files, file_out)
  File "C:UsersuserDesktopDUT1test.py", line 12, in produceOneCSV
    result_obj = pdlib.concat([pdlib.read_csv(file) for file in list_of_files])
  File "C:PythonPython385libsite-packagespandascorereshapeconcat.py", line 274, in concat
    op = _Concatenator(
  File "C:PythonPython385libsite-packagespandascorereshapeconcat.py", line 331, in __init__
    raise ValueError("No objects to concatenate")
ValueError: No objects to concatenate
  

Я не знаю, почему это не работает.
Кроме того, я хотел бы удалить заголовки из всех файлов, кроме первого.

Ответ №1:

У меня был аналогичный вариант использования, для которого я разработал этот фрагмент кода. Вы можете попробовать это следующим образом:

 import pandas as pd
from glob import glob
import os

def joinCsvFiles(outFile, dirPath, filePattern="*.csv"):
    dfs = []

    globPattern = os.path.join(dirPath, filePattern)

    fileParts = glob(globPattern)

    for filePart in fileParts:
        df = pd.read_csv(filePart, index_col=False, header=0)
        dfs.append(df)

    print("[!]. Merging {} part files to create a consolidated filen".format(len(dfs)))
    try:
        finalDf = pd.concat(dfs, sort=False)
        
        finalDf.to_csv(outFile, index=False)

        print ("[>]. Consolidated csv file generated successfully at filepath: '{}'n".format(outFile))

    except Exception as e:
        raise e


if __name__ == '__main__':
    joinCsvFiles("finalReport.csv", "c:/Users/user/Desktop/DUT1", "*.csv")
  

Комментарии:

1. Спасибо тебе за помощь, Захид. Я пробовал ваш код, но все еще получаю ошибки о pandasioparsers.py и pandas_libsparsers.pyx. Я забыл упомянуть, что мои файлы CSV имеют заголовки, а некоторые строки имеют больше столбцов, чем другие