python读取数据后写入excel,速度很慢

我有3万左右个txt数据文件,将内容写进表格中,但是运行后速度极慢,大概5秒才能完成一个文件,下面是我的代码,请问怎们解决?


import os
import shutil
import re
import codecs
import xlwt
 
src_dir_path = r'G:\\地震动数据\\esm'       #源文件路径
ls3 =[]                                                          #数值综合列表
ls4 =[]
book = xlwt.Workbook(encoding='utf-8',style_compression=0)       #创建excel文件
sheet = book.add_sheet('1',cell_overwrite_ok=True)               #创建sheet薄
for file in os.listdir(src_dir_path):                            #对路径内文件依次赋值(历遍读取)    
    if os.path.exists(src_dir_path):                             #判断路径是否存在            
        if os.path.isfile(src_dir_path+'/'+file):                #赋值文件,剔除文件夹类
            if 'HNE' in file:
              if 'ACC' in file:                        #选择某类型地震动数据读取,竖向或者水平
                with open(src_dir_path+"\\"+file,'r',encoding='utf-8') as f:            #打开文件,编码  
                    ls1 = []                                                            #列表1:用于存放地震学参数类别
                    ls2 = []                                                            #列表2:用于存放单个记录的数值
                    for num, line in enumerate(f):                                      #enumerate(f)将其组成一个索引序列(元组),
                        if num < 50:                                                    #地震参数采集位置,根据不同数据库可更改
                            information = line.split(":")                               #参数类别以及数值的拾取  
                            classification = information[ 0 ]
                            data = information[1]
                            classification1 = classification.rstrip()
                            data1 = data.rstrip()
                            ls1.append(classification1)
                            ls2.append(data1)
                print(file)
                ls3.append(ls2)
                ls4.append(file)
name = ls4
for i in range(0,24078):                                                                    #写入文件名称
    sheet.write(i+1,0,name[i])                
condition = ls1                                                                         #写入地震参数类别
for k in range(1,50):
    sheet.write(0,k,condition[k])
datalist = ls3                                                                          #写入地震参数数值
for l in range(0,24078):
    data = datalist[l]
    for j in range(1,50):
      sheet.write(l+1,j,data[j])
savepath = 'C:\\Users\\user\\Desktop\\ESM(E,ACC).xlsx'                                        #保存路径以及创建excel
book.save(savepath)

感觉有几个问题:

  1. 13行取得src_dir_path下的文件,14行何必要再判断src_dir_path路径存在?

  2. 18行-22行,打开文件逐行处理的流程似乎是错误的,估计问题就出在这里了。

针对上述问题,简单写了几行代码替换13-32行。未经测试,仅供题主参考。

for fn in os.listdir(src_dir_path):  
    file_name = os.path.join(src_dir_path, fn)
    if 'HNE' in fn and 'ACC' in fn and os.path.isfile(file_name):
        ls1, ls2 = list(), list()
        with open(file_name, 'r', encoding='utf-8') as fp:
            for line in fp.readlines()[:50]:
                information = line.strip().split(":") 
                classification = information[ 0 ]
                data = information[1]
                classification1 = classification.rstrip()
                data1 = data.rstrip()
                ls1.append(classification1)
                ls2.append(data1)
                    
        print(fn)
        ls3.append(ls2)
        ls4.append(fn)