![](/img/trans.png)
[英]merging multiple CSV files in one with same header but different csv files name with python
[英]Combine csv files with same name from different subfolders in to one csv
我有三个 CSV 文件,每个文件用于多个文件的特定文件名。 假设总共有 20 个文件名,因此在三个不同的文件夹中总共有 20* 3csv 文件。
文件夹 A- 1001.CSV,1002.CSV,1003.CSV...
文件夹B-1001.CSV,1002.CSV,1003.CSV
文件夹C-1001.csv,1002.csv,1003.csv……
我想为每个 1001,1002,1003,1004 获得一个 CSV 文件..... 所以总共 20csv 文件
我怎样才能做到这一点? 由于文件位于不同的文件夹中,所以 glob 无法正常工作(或者我不知道如何操作)
我做了以下假设:
这应该在每个子文件夹中生成一个“concat.csv”文件,其中包含该文件夹中所有其他文件的内容。 我在stackoverflow上使用了另一个代码片段来实际连接文件。
import os
import fileinput
rootdir = 'C:\\Users\\myname\\Desktop\\parentdir'
os.chdir(rootdir)
children = os.listdir()
for i in children:
path = os.path.join(rootdir, i)
os.chdir(path)
filenames = os.listdir()
with open('concat.csv', 'w') as fout, fileinput.input(filenames) as fin:
for line in fin:
fout.write(line + '\n')
import os
import shutil
import glob
import pandas as pd
path = '/mypath/'
# rename files
count = 1
for root, dirs, files in os.walk(path):
for i in files:
if i == 'whatever.csv':
os.rename(os.path.join(root, i), os.path.join(root, "whatever" + str(count) + ".csv"))
count += 1
# delete unwanted files
main_dir = path
folders = os.listdir(main_dir)
for (dirname, dirs, files) in os.walk(main_dir):
for file in files:
if file.startswith('dontwant'):
source_file = os.path.join(dirname, file)
os.remove(source_file)
# copy files to dir
for root, dirs, files in os.walk(path): # replace the . with your starting directory
for file in files:
if file.endswith('.csv'):
path_file = os.path.join(root,file)
shutil.copy2(path_file,path) # change you destination dir
# combine files
os.chdir(path)
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.