python 批量删除excel文件的某一行(多线程)

前言

简介

get_all_excel(path): 获得path下的所有文件,获得一个list split_list(all_list, count) : 对list进行切分,分成count个list,获得lists。count也是进程的数量 mutil_thread(lists) : 将lists传入,在此开启多线程 change_excel(file_list, i) : 遍历list里的所有文件,更改excel文件,i 是线程的索引值。

代码

import os
import pandas as pd
import threading
import time

def get_all_excel(path):
    type = (.xlsx)
    filelist = []

    for a, b, c in os.walk(path):
        for name in c:
            fname = os.path.join(a, name)
            if fname.endswith(type):
                filelist.append(fname)

    return filelist

def split_list(all_list, count):
    end_list = []
    n = len(all_list) // count  # 这里把一个列表切分成count个列表,在这里控制进程数
    for i in range(0, len(all_list), n):
        name = all_list[i:i + n]
        end_list.append(name)

    return end_list

def mutil_thread(lists):
    thread_list = []

    for i in range(len(lists)):
        t1 = threading.Thread(target=change_excel, args=((lists[i]), i))	#为每个线程传一个list
        thread_list.append(t1)

    for i in range(len(thread_list)):
        thread_list[i].start()

    for t in thread_list:	# 不然主线程结束,所有线程都结束
        t.join()

    print("程序结束")

def change_excel(file_list, i):
    count = 1
    fall_count = 1
    for excel in file_list:
        try:
            data = pd.read_excel(excel, header=None)
            if "XXXXX" in data.loc[?][?]:	# 如果excel表的第?行第?列包含XXXXX字符串
                new_data = data.drop(index=?)	# 去掉某一行,注意index从0开始
                new_data.to_excel(excel, float_format=%.5f, index=False, header=False)
                print("线程%d   "%i + excel + "   成功第%d次"%count + "已完成%.2f" %((count / file_list.__len__()) * 100)+"%" )
            else:
                print("线程%d   "%i + excel + "   不符合条件第%d次"%fall_count + "已完成%.2f" %((count / file_list.__len__()) * 100)+"%" )
                fall_count += 1
        except Exception as e:
            print(e)
            print(excel)
            fall_count += 1
        count += 1

if __name__ == __main__:
    time1 = time.time()

    path = r"F:XXXXXXXXX"
    list = get_all_excel(path)
    lists = split_list(list, 5) # 5个进程数
    mutil_thread(lists)

    time2 = time.time()
    print(time2 - time1)

总结

    善于利用try except,可以使程序持续运行 多线程的使用应该在有大量IO操作的前提下进行,否则应优先使用单线程
经验分享 程序员 微信小程序 职场和发展