如何合并一个文件夹中的所有csv文件,但它们都有不同的名称



我一直在寻找一种方法来合并文件夹中的所有csv文件。它们都有相同的头,但名称不同。我在youtube上找到了一些关于合并的视频,在stackoverflow上也找到了一些关于合并的问题。问题是本教程关注的是与:sales1、sales2等同名的文件。

在我的例子中,目录中的所有文件都是csv,位于'D:XXXXXXXXoutput'

我使用的代码是:

import pandas as pd
# set files path
amazon = r'D:XXXXXXXXoutputamazonbooks.csv'
bookcrossing = r'D:XXXXXXXXoutputbookcrossing.csv'
# merge files
dataFrame = pd.concat(
map(pd.read_csv, [amazon, bookcrossing]), ignore_index=True)
print(dataFrame)

如果代码可以合并文件夹输出中的所有文件(因为它们都是。csv),而不是命名它们中的每一个,这会更好。

如果有人能帮我解决这个问题,或者指导我如何解决这个问题,我将很高兴。

如果目标是将文件附加到单个结果中,则实际上根本不需要任何CSV处理。只写文件内容减去标题行(除了第一行)。glob将返回路径与模式匹配的文件名"*.csv"。

from glob import glob
import os
import shutil
csv_dir = r'D:XXXXXXXXoutput'
result_csv = r'd:XXXXXXXXcombined.csv'
first_hdr = True
# all .csv files in the directory have the same header
with open(result_csv, "w", newline="") as result_file:
for filename in glob(os.path.join(csv_dir, "*.csv")):
with open(filename) as in_file:
header = in_file.readline()
if first_hdr:
result_file.write(header)
first_hdr = False
shutil.copyfileobj(in_file, result_file)

(假设所有的css都有相同的列数)
尝试这样做:

import os
import pandas as pd
csvs = [file for file in os.listdir('D:XXXXXXXXoutput') if file.endswith('.csv')]
result_df = pd.concat([pd.read_csv(f'D:XXXXXXXXoutput{file}') for file in csvs])

最新更新