合并CSV文件

第一种情况:合并列名一致的csv文件

在这里插入图片描述

# @Purpose: 
# @Parameter:
# @Time:  18:08
# @Author: Emma

import pandas as pd
import numpy as np
import glob
import csv
import os


# my_HeBingCSV1函数目的:将path目录下的所有csv文件合并成一个文件保存在SaveCSVName里面,注意函数适用范围为列名完全一致的文件
def my_HeBingCSV1(path,SaveCsvName):
    file_list = glob.glob(path+'*.csv')   # 把path目录下的所有后缀为.csv的文件找出来,存入一个列表
    print(u'totally %s CSV files found' % len(file_list))

    # 读取第一个CSV文件(包含表头)并写入
    csvOne = pd.read_csv(file_list[0],encoding='utf-8-sig')   # encoding='utf-8-sig'与encoding='utf-8'的区别在于前者可以解决BOM等不可见但作怪的字符
    csvOne.to_csv(SaveCsvName,encoding="utf-8-sig",index=False)     # index = False是为了去掉索引号

    # 循环读写列表中的CSV文件(不加表头)
    for i in range(1,len(file_list)):
        csvOne = pd.read_csv(file_list[i],encoding='utf-8-sig')
        csvOne.to_csv(SaveCsvName, encoding="utf-8-sig",index = False, header = False, mode = 'a+' )    # mode = 'a+'表示附件方式写入,文件原有内容不会被清楚,否则会在原基础上覆盖
    print(u'Done!')
    """
    注意:若报错:UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 383-384: invalid continuation byte
        证明某个csv文件的编码并不是utf-8
    """

# 主函数
if __name__ == '__main__':
    path = r'C:\Users\Emma\Desktop/'  # r代表不转义
    SaveCsvName = path+'all.csv'  # 合并后的数据要保存的地方
    my_HeBingCSV1(path,SaveCsvName)

第二种情况:合并列名不同的csv文件

在这里插入图片描述

# @Purpose: 
# @Parameter:
# @Time:  18:08
# @Author: Emma

import pandas as pd
import numpy as np
import glob
import csv
import os

"""
my_HeBingCSV2函数目的:合并列并不一致的CSV文件
1. 读入CSV文件
2. 将文件转化为DataFrame类型
3. 利用DataFrame的concat函数将几个文件合并在一起,
        为什么要用DataFrame的concat函数,因为这个函数合并的时候,可以处理列不同的情况,没有的列内容就补上Nan
4. 再将最后合并的DataFrame转为CSV文件保存
"""
def my_HeBingCSV2(path,SaveCsvName):
    file_list = glob.glob(path + '*.csv')
    print(u'totally %s CSV files found' % len(file_list))
    
    # 读取第一个CSV文件
    csvFirst = pd.read_csv(file_list[0], encoding='utf-8')
    df = pd.DataFrame(csvFirst)

    for i in range(1, len(file_list)):
        csvName = pd.read_csv(file_list[i], encoding='utf-8')
        df1 = pd.DataFrame(csvName)
        df = pd.concat([df, df1], axis=0, ignore_index=True, sort=False)

    df.to_csv(SaveCsvName, encoding="utf_8", index=False, mode='a+')  # mode = 'a+'表示附件方式写入,文件原有内容不会被清楚,否则会在原基础上覆盖
    print(u'Done!')

# 主函数
if __name__ == '__main__':
    path = r'C:\Users\Emma\Desktop/'  # r代表不转义
    SaveCsvName = path + 'all.csv'
    # my_HeBingCSV1(path,SaveCsvName)
    my_HeBingCSV2(path,SaveCsvName)

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值