python 批量处理csv文件

现遇到一个问题如下:

  1. 需要删除每一个csv文件的前12行数据,然后保存。
  2. 需要对多个目录下的csv文件进行批量处理。

 

代码如下:

1. 处理单个csv文件

import csv

def preprocess(path):
    '''
    对于未处理过的不符合格式的csv文件,去掉前12行,若已经处理过的符合格式则不做处理
    '''
    results = []

    with open(path, "r", encoding='utf-8',newline='') as f:
        reader = csv.reader(f)
        for row in reader:
            results.append(row)
    
    # 判断是否处理过,判断条件根据实际需要修改,目的是对已经处理过的不做重复操作    
    if results[0][0] == 'Model':
        results = results[12:]
    
    with open(path, 'w', encoding='utf-8',newline='') as p:
            writer = csv.writer(p)
            writer.writerows(results)


if __name__ == '__main__':
    #输入待处理的文件路径
    csv_path = 'xxxx.csv'
    preprocess(csv_path)

 

2. 批量处理(某一目录下的任意深度的所有csv文件)

import os
import csv

def preprocess(path):
    '''
    对于未处理过的不符合格式的csv文件,去掉前12行,若已经处理过的符合格式则不做处理
    '''
    results = []

    with open(path, "r", encoding='utf-8',newline='') as f:
        reader = csv.reader(f)
        for row in reader:
            results.append(row)
    
    # 判断是否处理过,判断条件根据实际需要修改,目的是对已经处理过的不做重复操作    
    if results[0][0] == 'Model':
        results = results[12:]
    
    with open(path, 'w', encoding='utf-8',newline='') as p:
            writer = csv.writer(p)
            writer.writerows(results)


def findfile(path):
    '''
    寻找某一目录下(所有任意目录深度)的所有某种特定的文件(如csv),并对它进行某种操作(如去掉前12行数据)
    '''
    lsdir = os.listdir(path)
    files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
    dicts = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
    if files:
        for i in files:
            if i.split('.')[-1] == 'csv':
                preprocess(os.path.join(path, i))

    if dicts:
        for i in dicts:
            findfile(os.path.join(path, i))


if __name__ == '__main__':
    # 输入要处理的文件夹根目录
    file_dir = '0-79-1'
    findfile(file_dir)

参考:

https://blog.csdn.net/m0_46483236/article/details/109583685 

https://blog.csdn.net/m0_46483236/article/details/115764020

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值